C语言版实现链队列
本文实例为大家分享了C语言实现链队列的具体代码,供大家参考,具体内容如下
源文件部分: 指针没学好的同学很难看懂^_^,有点乱,希望对大家有点帮助。
#include#include #include #include typedefintElemtype; #include"LQueue.h" intmain() { Dequehead; instruction(head); return0; } 头文件部分: typedefstructQueue { Elemtypedata; structQueue*next; }LQnode,*LQueue; typedefstruct { LQnode*front; LQnode*rear; }Deque; voidInit_queue(Deque*head)//初始化+清空操作==其实这里的清空是指将头节点后的节点给丢弃掉 { LQnode*p=NULL; p=(LQueue)malloc(sizeof(LQnode)); head->front=p; head->rear=p; p->next=NULL; } intEmpty_queue(Deque*head)//判空 { if(head->front->next==head->rear->next) return1; return0; } intLenght_queue(Dequearrow) { LQnode*p=NULL; intlen=0; p=arrow.front->next; while(p) { len++; p=p->next; } returnlen; } voidEnqueue(Deque*arrow,Elemtypee)//入队操作 { LQueuep=NULL; p=(LQueue)malloc(sizeof(LQnode)); if(!p) { printf("已无更多的内存单元得到分配!\n"); return; } p->data=e; p->next=NULL;//插入时,队首指针是不需要动的 arrow->rear->next=p; arrow->rear=p; return; } voidDequeue(Deque*arrow,Elemtype*e)//出队操作 { LQnode*p=NULL; if(Empty_queue(arrow)) { printf("当前链队列为空,无法完成出队操作!!!\n"); return; } p=arrow->front->next; (*e)=p->data; arrow->front->next=p->next; printf("元素%d已退出队列!!!\n",*e); if(Lenght_queue(*arrow)==0) return;//当最后一个元素出列以后,arrow->rear不知道指向了哪里 free(p); return; } intQueue_top(Deque*arrow)//返回队首元素 { if(Empty_queue(arrow)) { printf("当前链队列为空,队首元素不存在!!!\n"); return0; } printf("当前队首元素是:%d\n",arrow->front->next->data); } voidDestroy_queue(Deque*arrow)//链队列的销毁 { LQnode*p=NULL; if(Empty_queue(arrow)) { printf("当前链队列为空,无须完成销毁操作!!!\n"); return; } while(arrow->front->next) { p=arrow->front->next; arrow->front->next=p->next; if(Lenght_queue(*arrow)==0) break; free(p); } printf("销毁成功!\n"); return; } voidPrint_queue(Dequearrow) { LQnode*p=NULL; p=arrow.front->next; while(p) { printf("%d",p->data); p=p->next; } printf("\n"); } voidModify_queue(Deque*arrow,Elemtypeindex,Elemtypee)//修改函数 { inti=0; LQnode*p=NULL; p=arrow->front->next; while(i next; } p->data=e; printf("已完成修改操作!\n"); } intInsearch_queue(Dequearrow,Elemtypee)//查找函数 { LQnode*p=NULL; inti=1; if(Empty_queue(&arrow)) { printf("当前链队列为空,没有元素可查找!!!\n"); return0; } p=arrow.front->next; while(p!=NULL) { if(e==p->data) { returni; break; } i++; p=p->next; } if(p==NULL) printf("查找失败,队列内无该元素存在!\n"); return0; } voidinstruction(Dequehead) { intn,m,t,a,b,len1,index; printf("\t\t1、队列初始化\n"); printf("\t\t2、新增队列元素\n"); printf("\t\t3、返回队首元素\n"); printf("\t\t4、元素出队列\n"); printf("\t\t5、查找队列元素\n"); printf("\t\t6、修改队列元素\n"); printf("\t\t7、销毁队列\n"); printf("\t\t8、队列的长度\n"); printf("\t\t9、打印队列元素\n"); printf("\t\t10、退出程序\n"); printf("请输入你所需要完成的指令:\n"); do{ scanf("%d",&n); if(n<1||n>10) printf("对不起,你输入的指令编号是无效的,请重新输入!!!\n"); }while(n<1||n>10); switch(n) { case1: Init_queue(&head); printf("已完成链队列初始化,请输入你要添加的元素个数!\n"); scanf("%d",&n); while(n--) { intx; scanf("%d",&x); Enqueue(&head,x); } printf("完成建队操作!\n"); break; case2: printf("请输入你要添加的元素个数!\n"); scanf("%d",&n); while(n--) { intx; scanf("%d",&x); Enqueue(&head,x); } printf("增添成功!\n"); break; case3: Queue_top(&head); break; case4: Dequeue(&head,&t); break; case5: printf("请输入你所要查找的元素:\n"); scanf("%d",&m); index=Insearch_queue(head,m); if(index) printf("你所要查找的元素位于队列的第%d个位置上!!!\n",index); break; case6: printf("请输入你更改的元素队列位置:\n"); do{ scanf("%d",&a); if(a<1||a>Lenght_queue(head)) printf("对不起,你所输入的元素位置不在区域内,请重新输入!!!\n"); }while(a<1||a>Lenght_queue(head)); printf("请输入修改后的值:\n"); scanf("%d",&b); Modify_queue(&head,a,b); break; case7: Destroy_queue(&head); break; case8: len1=Lenght_queue(head); printf("当前链队列的长度为:%d\n",len1); break; case9: Print_queue(head); break; case10: return; default: instruction(head); break; } instruction(head); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。