【数据结构】队列的链式表示和实现

#include<iostream>

using namespace std;
typedef int ElementType;
#define ERROR -1
//定义节点
typedef struct Node {
	ElementType Data;
	struct Node *Next;
}QNode;
//定义front和rear指针
typedef struct {
	QNode *rear;
	QNode *front;
}LinkQueue;


/*
出队算法:注意含有头节点
首先判断队列是否为空,若空返回-1
当队列只有一个元素时,队列的头和尾指针为NULL
其他情况从头删除节点,将头指针指向下一个位置
*/

ElementType DeleteQ(LinkQueue *PtrQ,ElementType *e)
{
	QNode *Tmp;
	ElementType TmpElem;
	if (PtrQ->front->Next == NULL)
	{
		cout << "队列为空" << endl;
		return ERROR;
	}
	Tmp = PtrQ->front->Next;
	if (PtrQ->front->Next == PtrQ->rear)
		PtrQ->front = PtrQ->rear = NULL;
	else
	{
		PtrQ->front->Next = Tmp->Next;
	}
	*e = Tmp->Data;
	cout << *e;
	delete Tmp;
	return 0;
}


/*
入队操作:
算法思想:首先为入队的元素分配一个新的结点,将新元素插入到队尾;
并修改队尾指针的值.
*/
ElementType AddQ(LinkQueue *PtrQ, ElementType X)
{
	QNode *RearCell;
	RearCell = new QNode;
	if (!RearCell)
		return -1;
	RearCell->Data = X;
	RearCell->Next = NULL;
	PtrQ->rear->Next = RearCell;
	PtrQ->rear = RearCell;
	return 0;
}

void Inital(LinkQueue *PtrQ)
{
	PtrQ->front = PtrQ->rear=new QNode;
	PtrQ->front->Next = NULL;
}

int VisitQueue(LinkQueue *PtrQ)
{
	if (PtrQ->front == PtrQ->rear)//如果是空队列..
	{
		cout << "空队列" << endl;
		return ERROR;
	}
	QNode *p;
	p = PtrQ->front->Next;//p指向队头结点
	while (p)//p不为空时
	{
		cout << p->Data << " "<<endl;//输出p指向的结点的值
		p = p->Next;//指针后移
	}
	return 1;
}

void main()
{
	LinkQueue PtrQ;
	int count,i,cell;
	ElementType t;
	Inital(&PtrQ);
	cout << "请输入入队的元素个数:" << endl;
	cin >> count;
	cout << "请输入入队的元素:" << endl;
	for(i=0;i<count;i++)
	{
		cin >> cell;
		AddQ(&PtrQ, cell);
	}
	DeleteQ(&PtrQ,&t);
	cout << "出队元素为:" << t << endl;
	cout << "队列中元素为:" << endl;
	VisitQueue(&PtrQ);
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值