#include<stdio.h>
#include<stdlib.h>
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//1.初始化
//链队的初始化就是构造一个只有头结点的空队
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QNode *)malloc(sizeof(QNode));//生成新结点作为头结点,队头和队尾指针指向此结点
Q.front->next=NULL;//头结点的指针域置空
}
//2.入队
//类似尾插法
void EnQueue(LinkQueue &Q,int e)
{
//e=为Q的新的队尾元素
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
p->data=e;p->next=NULL;//给新结点赋值
Q.rear->next=p;Q.rear=p;//将1新结点插入到队尾,并修改队尾指针,这里类似尾插法
}
//3.出队
void DeQueue(LinkQueue &Q,int *e)
{
QNode *p;
if(Q.front==Q.rear) printf("队空,出队错误");
p=Q.front->next;
*e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
}
//4.取队头元素
int GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}
//补充5.遍历
void Print(LinkQueue Q)
{
QNode *p=Q.front->next;
while(Q.front!=Q.rear&&p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
int x;
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,2);
EnQueue(Q,4);
EnQueue(Q,6);
EnQueue(Q,8);
printf("现在的链队是:");
Print(Q);
printf("\n队头元素是%d",GetHead(Q));
DeQueue(Q,&x);
printf("\n%d出队,现在的队列是:",x);
Print(Q);
return 0;
}
【数据结构C语言】链队——队列的链式表示和实现
最新推荐文章于 2025-02-22 16:07:42 发布