数据结构——队列的链表实现
程序员文章站
2022-07-14 12:13:46
...
数据结构——队列的链表实现
队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头,队列又称为“先进先出”。
操作:利用链表的形式,对队列进行初始化,入队,出队,遍历队列。
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1
#define OK 1
#define OVERFLOW 0
typedef int QElemType;
typedef int Status;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化链队列
Status InitQueue(LinkQueue &Q)
{
Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode));
if(!Q.front )
{
exit(OVERFLOW);
}
Q.front ->next =NULL;
return OK;
}
//入队列
Status EnterQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
{
exit(OVERFLOW);
}
p->data =e;
p->next =NULL;
Q.rear ->next =p;
Q.rear =p;
return OK;
}
//出队列
Status PopQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(Q.front ==Q.rear )
{
printf("队列为空,无法出队列!\n");
return ERROR;
}
p=Q.front ->next ;
e=p->data ;
Q.front ->next =p->next ;
if(Q.rear ==p)
{
Q.rear =Q.front ;
}
free(p);
return OK;
}
//遍历队列
void PrintQueue(LinkQueue &Q)
{
QNode *p;
printf("遍历已输入数据的队列:");
for(p=Q.front->next;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
}
int main()
{
LinkQueue Q;
int x,n;
InitQueue(Q);
printf("请输入队列的元素个数:\n");
scanf("%d",&n);
while(n--!=0)
{
printf("请输入队列元素:\n");
scanf("%d",&x);
EnterQueue(Q,x);//入队列
PrintQueue(Q);//遍历队列
printf("\n");
}
printf("\n出队列一个元素\n");
PopQueue(Q,x);
printf("%d\n",x);
return 0;
}
若代码有错误的地方或是其他代码,请各位指教。
上一篇: 数据结构---队列单链表实现
下一篇: 数据结构-队列-链表实现