链队列(入队、出队、展示队列)

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
using namespace std;
typedef struct QNode		//结点结构 
{
	int data;
	struct QNode *next;
}QNode,*QueuePtr;

typedef struct {
	QueuePtr front,rear;	//头尾指针 
}LinkQueue;					//队列的链式结构 

void InitQueue(LinkQueue *Q)	//初始化队列链表 
{
	//指针自身=(指针类型*)malloc(sizeof(指针类型)*数据数量) 
	Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
	//if(!Q->front)
	//	exit(OVERFLOW);
	Q->front->next=NULL;
}

void EnQueue(LinkQueue *Q,int e)
{
	//在链表尾部新建结点插入
	QueuePtr s=(QueuePtr)malloc(sizeof(QNode));	//建立一个结点
	s->data=e;
	cout<<"元素"<<e<<"进入队列\n";
	s->next=NULL;		//给新节点分配一下数据
	Q->rear->next=s;		//尾部的下一个结点就是新插入的 实现了入队
	Q->rear=s;			//s成为了新的尾部结点 
}

void DeQueue(LinkQueue *Q)
{
	QueuePtr p;	//要被删除的结点p
	//先判断空队列的情况
	if(Q->front==Q->rear)
	{
		cout<<"抱歉,队列为空不能够再次进行删除操作!\n";
		return ;
	}
	
	p=Q->front->next;
	cout<<"元素:"<<p->data<<"已经被队列删除"<<endl; 
	Q->front->next=p->next;			//删除p  头结点的下一位是p的下一位 所以p就被删除了
	
	if(Q->rear==p)					//如果队头就是队尾 删除后两者归一 
		Q->rear=Q->front; 
	free(p);		//删除掉后就可以清除内存了 
}

void  QueueTraverse(LinkQueue Q)
{
	QueuePtr p;
	p=Q.front->next;	//从第一位开始  front的下一位才是第一位
	cout<<"从队首开始展示队列中的元素:\n" ;
	while(p)
	{
		 cout<<p->data<<" ";
		 p=p->next;
	}
	printf("\n");
}
int main()
{
	LinkQueue Q;
	InitQueue(&Q);
	EnQueue(&Q,1);
	EnQueue(&Q,2);
	EnQueue(&Q,3);
	DeQueue(&Q);
	EnQueue(&Q,4);
	QueueTraverse(Q);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值