2022年队列的顺序表示和实现 .pdf
#include /*此为循环队列 */ #include #include #define MAXNUM 10 #define Elemtype int #define TRUE 1 #define FALSE 0 typedef struct Elemtype queueMAXNUM; int front; int rear; sqqueue; int initQueue(sqqueue * q) if(!q)return FALSE; q-front=0; q-rear=0; return TRUE; int append(sqqueue * q,Elemtype x) if(q-rear+1)%MAXNUM=q-front)printf(n 队列满 !); return FALSE; q-queueq-rear=x;q-rear=(q-rear+1)%MAXNUM; return TRUE; int Delete(sqqueue * q) Elemtype x; if(q-front=q-rear) printf( 队列空 !n); return 0; x=q-queueq-front;q-front=(q-front+1)%MAXNUM; printf(n 队头元素 %d 出队!n,x); return TRUE; int Empty(sqqueue * q) if(q-front=q-rear) #include /*此为普通队列 */ #include #include #define MAXNUM 100 #define Elemtype int #define TRUE 1 #define FALSE 0 typedef struct Elemtype queueMAXNUM; int front; int rear; sqqueue; int initQueue(sqqueue * q) if(!q)return FALSE; q-front=-1; q-rear=-1; return TRUE; int append(sqqueue * q,Elemtype x) if(q-rear=MAXNUM-1) return FALSE; q-rear+; q-queueq-rear=x; return TRUE; Elemtype Delete(sqqueue * q) Elemtype x; if(q-front=q-rear) printf( 队列空 !n); return 0; x=q-queue+q-front; printf(n 队头元素 %d 出队 !n,x); return x; int Empty(sqqueue * q) if(q-front=q-rear) return TRUE; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - return TRUE; return FALSE; int gethead(sqqueue * q) Elemtype x; if(q-front=q-rear) printf( 队列空 !n);return 0; x=(q-queueq-front); printf( 队头元素为 :%dn,x); return x; void display(sqqueue * q) int s; s=q-front; if(q-front=q-rear) printf( 队列空 !n); else printf(n 顺序队列依次为:); while(s!=q-rear) printf(%dqueues); s=(s+1)%MAXNUM; printf(n); printf( 顺 序 队 列 的 队 尾 元 素 所 在 位置:rear= %dn,q-rear); printf( 顺 序 队 列 的 队 头 元 素 所 在 位置:front= %dn,q-front); printf(顺序队列的长度为 :%dn,(q-rear-q-front+MAXNUM)%MAXNUM); void Setsqqueue(sqqueue *q) int n,i,m; printf(n 请输入顺序队列的长度:); scanf(%d,&n); printf(n 请依次输入入顺序队列的元素return FALSE; int gethead(sqqueue * q) Elemtype x; if(q-front=q-rear) printf( 队列空 !n);return 0; x=(q-queueq-front+1); printf( 队头元素为 :%dn,x); return x; void display(sqqueue * q) int s; s=q-front; if(q-front=q-rear) printf( 队列空 !n); else printf(n 顺序队列依次为:); while(srear) s=s+1; printf(%dqueues); printf(n); printf(顺 序 队 列 的 队 尾 元 素 所 在 位置:rear= %dn,q-rear); printf(顺 序 队 列 的 队 头 元 素 所 在 位置:front= %dn,q-front); void Setsqqueue(sqqueue *q) int n,i,m; printf(n 请输入顺序队列的长度:); scanf(%d,&n); printf(n请依次输入入顺序队列的元素值:n); for(i=0;in;i+) scanf(%d,&m); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 值:n); for(i=0;in;i+) scanf(%d,&m); append(q,m); void main() sqqueue *head; int x,select; head=(sqqueue*)malloc(sizeof(sqqueue); printf(n 第一次使用请初始化!n); do printf(=主菜单=n); printf(1 初始化 n); printf(2 建立顺序队列 n); printf(3 入队n); printf(4 出队n); printf(5 判断队列是否为空n); printf(6 取队头元素 n); printf(7 遍历队列 n); printf(0 结束程序运行 n); printf(=n); printf(n 请选择操作 (1-7):n); scanf(%d,&select); switch(select) case 1: initQueue(head); printf( 已经初始化顺序队列!n); break; case 2: Setsqqueue(head); printf(n 已经建立队列 !n); display(head); break; append(q,m); void main() sqqueue *head; int x,select; head=(sqqueue*)malloc(sizeof(sqqueue); printf(n 第一次使用请初始化!n); do printf(=主菜单=n); printf(1 初始化 n); printf(2 建立顺序队列 n); printf(3 入队 n); printf(4 出队 n); printf(5 判断队列是否为空n); printf(6 取队头元素 n); printf(7 遍历队列 n); printf(0 结束程序运行 n); printf(=n); printf(n 请选择操作 (1-7):n); scanf(%d,&select); switch(select) case 1: initQueue(head); printf( 已经初始化顺序队列!n); break; case 2: Setsqqueue(head); printf(n 已经建立队列 !n); display(head); break; case 3: printf( 请输入队的值:n); scanf(%d,&x); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - case 3: printf( 请输入队的值:n); scanf(%d,&x); append(head,x); display(head); break; case 4: Delete(head); display(head); break; case 5: if(Empty(head) printf( 队列空 n); else printf( 队列非空 n); break; case 6: gethead(head); break; case 7: display(head); break; case 0: exit(0); default: printf( 输入出错,请重新输入0-7 之间的数!n); while(select!=0); append(head,x); display(head); break; case 4: Delete(head); display(head); break; case 5: if(Empty(head) printf( 队列空 n); else printf( 队列非空 n); break; case 6: gethead(head); break; case 7: display(head); break; case 0: exit(0); default: printf( 输入出错,请重新输入0-7 之间的数!n); while(select!=0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 以循环队列为例:点击运行:输入 1,初始化:输入 2,建立顺序队列,按要求输入长度和元素值:输入 3,做入队操作:输入 4,出队操作:输入 5,判断是否为空:输入 6,取队头元素:输入 7,遍历队列:因为远程是不能实现当输入错误是的响应的,所以我将程序该了一下,当输入错误数值是,程序会提示错误,并要求输入正确的值:如下:当输入任何大于7 的数后:输入 0,结束程序:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -