1、初始化一个链队列,输入队列元素;
2、对已建立的链队列实现遍历队列、求队列长度、队列的判空、获取队头队尾元素、队列的入队出队等 *** 作。
3、最好用菜单形式对应各个 *** 作,使其编程一个完整的小软件。
参考界面:
#include#include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW 0 #define MAXQSIZE 100 typedef int QElemType; typedef int Status;typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }linkQueue; int i,n;//i控制循环,n表示位序 QElemType e;//一个临时的队列元素; Status InitQueue(linkQueue &Q); void QueueEmpty(linkQueue Q); Status QueueLength(linkQueue Q); void GetHead(linkQueue &Q,QElemType &e); void GetDataEnd(linkQueue &Q,QElemType &e); Status EnQueue(linkQueue &Q,QElemType e); Status DeQueue(linkQueue &Q,QElemType &e); void QueueTraverse(linkQueue Q); int main(){ linkQueue Q; int code; while(1){ system("cls"); printf("**********************************************************n"); printf("**** ****系统菜单**** ****n"); printf("**** * 1.初始化队列 * ****n"); printf("**** * 2.输入队列元素 * ****n"); printf("**** * 3.遍历队列 * ****n"); printf("**** * 4.求队列的长度 * ****n"); printf("**** * 5.获取队头元素 * ****n"); printf("**** * 6.获取队尾元素 * ****n"); printf("**** * 7.在队尾插入元素 * ****n"); printf("**** * 8.删除队头元素 * ****n"); printf("**** * 9.判断是否为空队列 * ****n"); printf("**** * 10.退出 * ****n"); printf("**********************************************************n"); printf("请输入 *** 作代码:"); scanf("%d",&code); switch(code) { case 1: { int temp; temp=InitQueue(Q); if(temp==OK) printf("链队列初始化成功!n"); else printf("链队列初始化失败!n"); break; } case 2: { int temp,i,e; printf("请输入要入队的元素个数:"); scanf("%d",&temp); for(i=1;i<=temp;i++) { printf("请输入第%d个元素:",i); scanf("%d",&e); EnQueue(Q,e); } break; } case 3: { QueueTraverse(Q); break; } case 4: { int temp; temp=QueueLength(Q); if(temp==ERROR) printf("队列不存在!n"); else printf("队列长度为:%dn",temp); break; } case 5: { int e; GetHead(Q,e); printf("队头元素为:%dn",e); break; } case 6: { int e; GetDataEnd(Q,e); printf("队尾元素为%dn",e); break; } case 7: { int e,temp; printf("请输入要输入的队尾元素:"); scanf("%d",&e); temp=EnQueue(Q,e); if(temp==OK) printf("插入成功!n"); break; } case 8: { int e; DeQueue(Q,e); printf("删除的队头元素为:%dn",e); break; } case 9: { QueueEmpty(Q); break; } case 10: { printf("程序结束!n"); return 0; break; } default:printf("数据无效,请重新输入!n"); } system("pause"); } } Status InitQueue(linkQueue &Q) { //Q.rear = new QElemType[MAXQSIZE]; Q.front=Q.rear=new QNode; if(!Q.front) exit(OVERFLOW); Q.front->next=NULL; return OK; } void QueueEmpty(linkQueue Q) { if(Q.front==Q.rear) printf("队列为空!"); else printf("队列不为空!"); } Status QueueLength(linkQueue Q) { int num=0; if(Q.front==Q.rear){ printf("空队列,长度为0.n"); return OK; } Q.front=Q.front->next; while(Q.front) { Q.front=Q.front->next; num++; } return num; } void GetHead(linkQueue &Q,QElemType &e) { e=Q.front->next->data; } //****************************获取队尾元素*************************** void GetDataEnd(linkQueue &Q,QElemType &e){ e=Q.rear->data; } Status EnQueue(linkQueue &Q,QElemType e) { QNode *p; p= new QNode; if(!p) exit(OVERFLOW); p->data=e; p->next=NULL; Q.rear->next=p;//****是否有头结点的关键语句,若rear不指向next,则无头结点,反之亦然。**** Q.rear=p; return OK; } Status DeQueue(linkQueue &Q,QElemType &e) { QNode *p; if(Q.front==Q.rear) return ERROR; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; delete p; return OK; } void QueueTraverse(linkQueue Q) { int e; printf("队列遍历结果:n"); while(Q.front!=Q.rear) { Q.front=Q.front->next; e=Q.front->data; printf("%dt",e); } printf("n"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)