队列初体验~
初学队列~把代码show一下~程序代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Qnode { int data; struct Qnode* next; }Qnode,*QueuePrt; typedef struct { QueuePrt front,rear; }LinkQueue; void initQueue(LinkQueue* s);//创造一个队列 void insertQueue(LinkQueue* s,int e);//入队 void deletQueue(LinkQueue* s,int* e);//出队 void destroyQueue(LinkQueue* s); //删除队列 int Queuelen(QueuePrt head,QueuePrt end); //获取队列相对长度 int judge_emptyQueue(LinkQueue* s);//判断队列是否为空 int main() { LinkQueue s={0};//新建队列 int e=0; int i=0; initQueue(&s); puts("入队:"); for (i=0;i!=15;++i) { insertQueue(&s,i+1); //入队 printf("%3d ",i+1); } puts(""); printf("队列长度:%d\n",Queuelen(s.front,s.rear)); puts("出队:"); while (judge_emptyQueue(&s)==0)//当队列不为空时出队 { deletQueue(&s,&e); //出队 printf("%3d ",e); } destroyQueue(&s); //释放队列 puts(""); return 0; } void initQueue(LinkQueue* s) { s->front=s->rear=(QueuePrt)malloc(sizeof (Qnode));//创建一个队列 if (s->front==NULL)//如果创建失败就退出程序 { puts("创建失败"); exit(0); } s->front->next=NULL; //初始化数据 s->front->data=0; } void insertQueue(LinkQueue* s,int e) //入队 { QueuePrt p=NULL; //申请一个空间 p=(QueuePrt)malloc(sizeof (Qnode)); if (p==NULL) { puts("加入失败"); return ; } p->next=NULL;//p的下一个指针指向NULL p->data=0; s->rear->data=e; //队尾入队 s->rear->next=p; //rear为对列尾部指向于p s->rear=p; //把对列尾部指针移向于p } void deletQueue(LinkQueue* s,int* e) { QueuePrt p=NULL; //初始化一个队列指针 if (judge_emptyQueue(s)) //如果队列为空 { puts("删除失败"); return ; } p=s->front; //p指向队头 *e=p->data; //获取队头元素 s->front=s->front->next; //移动队头指针 free(p); //释放原来的队头 } void destroyQueue(LinkQueue* s) { QueuePrt p=s->front; if (s->front==NULL) return ; while (s->front->next) { s->front=s->front->next; free(p); p=s->front; } free(p); s->front=NULL; } int judge_emptyQueue(LinkQueue* s)//判断队列是否为空 { if (s->front) return s->front==s->rear; else return 1; } int Queuelen(QueuePrt head,QueuePrt end) { int i=0; QueuePrt p=head; if (head==NULL||end==NULL) return 0; while (p!=end&&p) { p=p->next; ++i; } if (p==NULL) { puts("队列长度出错了"); return -1; } return i; }
[此贴子已经被作者于2017-3-7 23:39编辑过]