数据结构与算法导论(C++)连载(三)--队列(顺序存储和链式存储)

本文介绍了数据结构中的队列,重点探讨了使用C++实现顺序存储和链式存储队列的方法。通过创建Queue类,并在对应的头文件和源文件中实现相关操作,展示了队列的先进先出特性。文章提供了详细的代码示例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列是一种特殊的线性表,因此也可以分为顺序存储和链式存储。队列最突出的特点是先进先出。

一、顺序存储

新建一个类Queue,在Queue.h中:

#include"iostream"

using namespace std;
#define MaxSize 1024
#define ElementType int

// 顺序存储
class Queue
{
public:
	Queue();
	~Queue();
	void MakeEmptyQ();
	void AddQ(ElementType item);
	ElementType DeleteQ();
	int Length();
private:
	ElementType Data[MaxSize];
	int front; //头指针
	int rear;  //尾指针
};

在Queue.cpp中:

#include "Queue.h"



Queue::Queue()
{
}
Queue::~Queue()
{
}

//顺序存储:
void Queue::MakeEmptyQ() //工作队列,若是循环队列,要采用加1取余法
{
	front = -1;
	rear = -1;
}

void Queue::AddQ(ElementType item)
{
	if (front == -1) front++;
	if (rear == MaxSize - 1)cout << "error\n";
	else
	{
		rear++;
		Data[rear] = item;
	}
}

ElementType Queue::DeleteQ()
{
	ElementType tmp;
	int i;
	if (rear == -1) return -1;
	else
	{
		tmp = Data[front];
		for ( i = 0; i < rear; i++)
		{
			Data[i] = Data[i + 1];
		}
		rear--;
		return tmp;
	}
}

int Queue::Length()
{
	return rear + 1;
}

在main.cpp中:

#include"Queue.h"


int main()
{
	Queue Q;
	Q.MakeEmptyQ();
	Q.AddQ(1); Q.AddQ(2); Q.AddQ(3); Q.AddQ(4);
	cout << Q.Length() << "\n";
	cout<<Q.DeleteQ()<<"\n";
	cout << Q.DeleteQ() << "\n";
	cout << Q.DeleteQ() << "\n";
	Q.AddQ(9); Q.AddQ(8); Q.AddQ(7);
	cout << Q.DeleteQ() << "\n";
	cout << Q.DeleteQ() << "\n";
	cout << Q.Length() << "\n";
	system("pause");
	return 0;
}

运行结果:

 

二、链式存储

新建一个类Queue,在Queue.h中

#include"iostream"

using namespace std;
#define ElementType int

class Node
{
public:
	ElementType Data;
	struct Node * Next;
};

class Queue
{
public:
	Queue();
	~Queue();
	void AddQ(ElementType item);
	ElementType DeleteQ();
	bool Empty();
private:
	Node * rear; //队尾指针
	Node * front; //对头指针
};

在Queue.cpp中:

#include "Queue.h"

Queue::Queue()
{
	Node * temnode = new Node;
	temnode->Next = nullptr;
	front = temnode;
	rear = temnode;
}

Queue::~Queue()
{
}

void Queue::AddQ(ElementType item)
{
	Node * s= new Node;
	s->Data = item;
	s->Next = NULL;
	rear->Next = s;
	rear = s;
}

ElementType Queue::DeleteQ()
{
	if (Empty()) return false;
	ElementType data;
	Node * denode=new Node;
	denode = front->Next;
	front->Next = denode->Next;
	data = denode->Data;
	delete denode;
	return data;
}

bool Queue::Empty()
{
	if (front == rear) return true;
	return false;
}

在main.cpp中:

#include"Queue.h"

int main()
{
	Queue Q;
	Q.AddQ(1); Q.AddQ(2); Q.AddQ(3);
	cout << Q.DeleteQ()<<"\n";
	cout << Q.DeleteQ() << "\n";
	Q.AddQ(4); Q.AddQ(5);
	cout << Q.DeleteQ() << "\n";
	cout << Q.DeleteQ() << "\n";
	system("pause");
	return 0;
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值