赞
踩
三段代码分别是队列的顺序存储,带头结点的链式存储队列,不带头结点的链式存储队列。
都包括着初始化、判空、入队 、创建、出队、遍历操作,三段代码都是键入9999即输入结束,方便大家调试。
- #include<stdio.h>
- #include<stdlib.h>
- # define MaxSize 50
- typedef struct{
- int data[MaxSize];
- int front,rear;
- }SqQueue;
-
- void InitQueue(SqQueue &Q)
- {
- Q.front = Q.rear = 0;
- }
-
- bool QueueEmpty(SqQueue Q) //牺牲一个单元来判空
- {
- if(Q.front == Q.rear)
- return true;
- else
- return false;
- }
-
- bool EnQueue(SqQueue &Q,int x)
- {
- if((Q.rear+1)%MaxSize==Q.front) //牺牲一个单元格来区分队空和队满
- return false;
- Q.data[Q.rear] = x;
- Q.rear=(Q.rear + 1)%MaxSize;
-
- return true;
- }
-
- void CreateQueue(SqQueue &Q)
- {
- int x = 0;
- scanf("%d",&x);
- while(x!=9999)
- {
- EnQueue(Q,x);
- scanf("%d",&x);
- }
- }
- bool DeQueue(SqQueue &Q,int &x)
- {
- if(Q.front == Q.rear) //判断队空
- return false;
- x=Q.data[Q.front];
- printf("%d已出队\n",x);
- Q.front = (Q.front + 1)%MaxSize;
- return true;
- }
- bool GetTop(SqQueue Q,int &x) //读取队首元素
- {
- if(Q.front == Q.rear) //判断队空
- return false;
- x=Q.data[Q.front];
- printf("队首元素为%d\n");
- }
- void Print(SqQueue Q)
- {
- while(Q.front!=Q.rear)
- {
- printf("%d ",Q.data[Q.front]);
- Q.front = (Q.front + 1)%MaxSize;
- }
- }
- int main()
- {
- SqQueue Q;
- int x = 0;
- InitQueue(Q); //初始化
- CreateQueue(Q); //创建
- EnQueue(Q,666); //666入队
- DeQueue(Q,x); //出队
- Print(Q); //遍历
- return 0;
- }
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct LinkNode{ //链式队列结点
- int data;
- struct LinkNode *next;
- }LinkNode;
- typedef struct{ //链式队列
- LinkNode *front,*rear; //队列的队头和队尾指针
- }LinkQueue;
-
- void InitQueue(LinkQueue &Q)
- {
- Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));
- Q.front->next = NULL;
- }
- bool QueueEmpty(LinkQueue Q) //判空
- {
- if(Q.front == Q.rear )
- return true;
- else
- return false;
- }
- void EnQueue(LinkQueue &Q,int x) //进队
- {
- LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
- s->data = x;
- s->next =NULL;
- Q.rear->next = s;
- Q.rear = s; //修改尾指针
- }
- void CreateQueue(LinkQueue &Q) //创建队
- {
- int x = 0;
- scanf("%d",&x);
- while(x!=9999)
- {
- EnQueue(Q,x);
- scanf("%d",&x);
- }
- }
- bool DeQueue(LinkQueue &Q,int &x) //出队
- {
- if(Q.front == Q.rear)
- return false;
- LinkNode *D=Q.front->next ;
- x=D->data;
- Q.front->next =D->next ;
- if(Q.rear == D)
- Q.rear=Q.front; //只剩一个元素,删除后变空
- free(D);
- return true;
- }
-
- bool GetTop(LinkQueue Q,int &x) //读取队首元素,并用x返回
- {
- if(Q.front->next == NULL)
- return false;
- x=Q.front->next->data ;
- printf("\n队首元素值为:%d\n",x);
- return true;
- }
- void Print(LinkQueue Q) //遍历 Q
- {
- LinkNode *p=Q.front->next ;
- while(p != Q.rear )
- {
- printf("%d ",p->data);
- p=p->next ;
- }
- printf("%d ",Q.rear->data);
- }
- int main()
- {
- int x = 0;
- int A = 0;
- LinkQueue Q; //声明
- InitQueue(Q); //初始化
- CreateQueue(Q); //创建
- EnQueue(Q,666); //666入队
- DeQueue(Q,x); //出队
- Print(Q); //遍历
- GetTop(Q,A); //读取队首元素
- return 0;
- }
- #include<stdio.h>
- #include<stdlib.h>
-
- typedef struct LinkNode{
- int data;
- struct LinkNode *next;
- }LinkNode;
- typedef struct{
- LinkNode *front,*rear;
- }LinkQueue;
-
- void InitQueue(LinkQueue &Q) //不带头结点的初始化
- {
- Q.front = Q.rear = NULL;
- }
-
- bool QueueEmpty(LinkQueue Q) //判空
- {
- if(Q.front == Q.rear && Q.front==NULL)
- return true;
- else
- return false;
- }
- void EnQueue(LinkQueue &Q,int x) //入队,注意两种情况
- {
- if(Q.front == Q.rear && Q.front ==NULL)
- {
- LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
- s->data = x;
- Q.front = Q.rear = s;
- }
- else
- {
- LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
- s->data = x;
- Q.rear->next = s;
- Q.rear = s;
- Q.rear->next=NULL;
- }
- }
- void CreateQueue(LinkQueue &Q)
- {
- int x = 0;
- scanf("%d",&x);
- while(x!=9999)
- {
- EnQueue(Q,x);
- scanf("%d",&x);
- }
- }
- bool DeQueue(LinkQueue &Q,int &x)
- {
- if(Q.front == Q.rear && Q.front == NULL)
- return false;
- x=Q.front->data ;
- printf("\n%d已出队\n",x);
- if(Q.front==Q.rear)
- {
- Q.front = Q.rear = NULL;
- return true;
- }
- else
- {
- Q.front=Q.front->next ;
- return true;
- }
- }
- bool GetTop(LinkQueue Q,int &x)
- {
- if(Q.front == Q.rear && Q.front == NULL)
- return false;
- x=Q.front->data ;
- printf("队首元素为%d\n",x);
- return true;
- }
- void Print(LinkQueue Q)
- {
- LinkNode *h=Q.front ;
- while(h!= Q.rear )
- {
- printf("%d ",h->data);
- h = h->next ;
- }
- printf("%d ",Q.rear->data);
- }
- int main()
- {
- int x = 0;
- int A = 0;
- LinkQueue Q; //声明
- InitQueue(Q); //初始化
- CreateQueue(Q); //创建
- EnQueue(Q,666); //666入队
- DeQueue(Q,x); //出队
- GetTop(Q,A); //获取队首元素
- Print(Q); //遍历
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。