博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c_数据结构_队的实现
阅读量:5826 次
发布时间:2019-06-18

本文共 4719 字,大约阅读时间需要 15 分钟。

# 链式存储 #include
#include
#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef struct QNode{ int data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front; //队头指针 QueuePtr rear; //队尾指针}LinkQueue;//批量存入数据int create(LinkQueue &Q){ int i,n; QNode *p; printf("请输入需要存入的元素个数:"); scanf("%d",&n); while(n<=0){ printf("\n元素个数小于了“1”,请重新输入元素个数:"); scanf("%d",&n); } printf("请输入元素:\n"); for(i=n;i>0;--i) { p=(QueuePtr)malloc(sizeof(QNode)); scanf("%d",&p->data); Q.rear->next=p; //尾指针后移 Q.rear=p; //放入元素 } p->next=NULL; return OK;}//构建空队int InitQueue_Q(LinkQueue &Q){ Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) { printf("存储空间分配失败!!"); exit(OVERFLOW); } Q.front->next=NULL; return OK;}//打印队列中的元素int pr(LinkQueue &Q,int e){ QueuePtr p; p=Q.front->next; if(Q.front==Q.rear) return ERROR; printf("\n队列中的元素为:\n"); while(p) { printf("%d\n",p->data); p=p->next; } return OK;} int GetHead_Q(LinkQueue &Q,int &e){ if(Q.rear==Q.front)return ERROR; QueuePtr p; p=Q.front->next; //将原队列的头结点赋值给p e=p->data; printf("队头元素为:%d\n",e); return OK;}//队尾插入元素int EnQueue_Q(LinkQueue &Q,int &e){ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p){ //存储分配失败 printf("存储空间分配失败!!!\n"); exit(OVERFLOW); } printf("请输入插入元素:"); scanf("%d",&e); p->data=e; //e赋值给p指向的空间 p->next=NULL; //p指向NULL Q.rear->next=p; Q.rear=p; //将p赋给Q return OK;}// 删除队列头元素int DeQueue_Q(LinkQueue &Q,int &e){ QNode *P; if(Q.front==Q.rear) return ERROR; P=Q.front->next ; e=P->data; Q.front ->next =P->next; //将原对头的后继p->next赋值给头结点后继 if(Q.rear ==P) //当队列中只有一个元素时,q->rear指向头结点 Q.rear =Q.front; free(P); printf("删除的元素为:%d",e); return OK;}// 销毁队列int dest(LinkQueue &Q){ while(Q.front){ Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; } InitQueue_Q(Q); //队销毁后,调用create()从新创建一个空队,因为初始化不在witch语句里 return OK;}void OperateMenu(){ printf("\n\n--------------请选择元素处理方式---------\n\n"); printf("注:此程序为队的实现,故只能对序列尾进行元素的插入和删除\n\n"); printf("0> 退出程序\n\n"); printf("1> 批量存入数据\n\n"); printf("2> 获取队头元素\n\n"); printf("3> 队尾插入元素\n\n"); printf("4> 删除队头元素\n\n"); printf("5> 打印队列\n\n"); printf("6> 销毁队列\n\n"); printf("请选择对元素的处理:");}void main(){ LinkQueue Q; int w,e,k,boo=1; printf("注:此测试过程输入值应全为数字\n\n"); printf("请用户选择初始化队或退出程序:\n\n"); printf("队初始化请输入:'1'\n\n"); printf("退出请选择'0'或 其它!!\n\n"); printf("请选择:"); scanf("%d",&w); if(w==1){ if(InitQueue_Q(Q)) printf("\n构建空队成功!!"); else printf("\n构建失败!!"); OperateMenu(); scanf("%d",&k); while(k) { switch(k) { case 0:break; case 1:boo=create(Q); if(boo) printf("\n存入成功!!\n"); else printf("\n存入失败!!\n"); break; case 2:boo=GetHead_Q(Q,e); if(boo) printf("\n获取成功!!\n"); else printf("\n队为空,获取失败!!\n"); break; case 3:boo=EnQueue_Q(Q,e); if(boo) printf("\n插入成功!!\n"); else printf("\n插入失败!!\n"); break; case 4:boo=DeQueue_Q(Q,e); if(boo) printf("\n删除成功!!\n"); else printf("\n队为空,删除失败!!\n"); break; case 5:boo=pr(Q,e); if(boo) printf("\n打印成功!!\n"); else printf("\n队为空,打印失败!!\n"); break; case 6:boo=dest(Q); if(boo) printf("\n 销毁成功!!\n"); else printf("\n销毁失败!!\n"); } OperateMenu(); scanf("%d",&k); } }// return OK;}

 

转载于:https://www.cnblogs.com/Vera-y/p/9971268.html

你可能感兴趣的文章
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
Linux 文件IO理解
查看>>
Ninject 2.x细说---2.绑定和作用域
查看>>
30个非常时尚的网页联系表单设计优秀示例
查看>>
使用membership(System.Web.Security)来进行角色与权限管理
查看>>
opticom 语音质量验证白皮书
查看>>
3D实时渲染中的BSP树和多边形剔除
查看>>
Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
查看>>
网络抓包的部署和工具Wireshark【图书节选】
查看>>
Redis在Windows+linux平台下的安装配置
查看>>
Maven入门实战笔记-11节[6]
查看>>
Local declaration of 'content' hides instance variable
查看>>
ASP.NET中 HTML标签总结及使用
查看>>