Tag:链队列

Tag (链队列)'s result:

链队列

链队列带有头结点(不存数值,只为方便操作),队尾指针存有元素,这里我实现了链队列的初始化,插入,删除,销毁操作 #include <stdio.h> #include <stdlib.h> typedef struct Qnode { int data; struct Qnode *next; } Qnode,*Qptr; typedef struct { Qptr f; Qptr r; } linkqueue; int initqueue(linkqueue &Q) //初始化队列 { Q.f = Q.r = (Qptr)malloc(sizeof(Qnode)); //动态分配空间,队头和队尾指针要指向同一个地址 if (Q.f) return 0; Q.f->next = NULL; return 1; } int ins(linkqueue &Q,int e) { Qptr p; p = (Qptr)malloc(sizeof(Qnode)); //生成结点 if (!p) return 0; p->data = e; //尾插 p->next = NULL; Q.r->next = p; Q.r = p; //更新尾结点 return 1; } int del(linkqueue &Q) { Qptr p; int e; if (Q.f==Q.r) return 0; //判空 p = Q.f->next; e = p->data; Q.f->next = p->next; if (Q.r==p) Q.r = Q.f; //如果队列就一个尾结点,删掉就空了 free(p); return e; } void destroy(linkqueue &Q) { while (Q.f) { Q.r = Q.f->next; free(Q.f); Q.f = Q.r; } printf(“链队列销毁完毕!\n”); } void printqueue(linkqueue Q) { Qptr p; p = Q.f; printf(“此时链队列中的元素为:\n”); while (p->next) { printf(“%d “,p->next->data); p = p->next; } } int main() { int x,m; linkqueue Q; initqueue(Q); printf(“请输入插入到链队列中的元素值\n”); while (scanf(“%d”,&x)!=EOF) { ins(Q,x); } printqueue(Q); printf(“\n删除队头元素\n”); m = del(Q); printf(“删除的元素是%d\n”,m); printqueue(Q); return 0;……