c++实现队列的两种结构
1、队列的特点:
-
队列是一个竹筒塞纸团的操作,先进先出,且只能往一边进一边出
-
队列的结构如下所示:

-
队列有两种实现方法,分别是顺序存储(用数组实现 )结构和链式存储结构(用链表实现)
2、队列的顺序存储结构实现方法
-
定义一个队列:
class queue { public: void* data[maxsize]; int size; };
-
队列的初始化操作
//初始化操作
queue* queue_init()
{
queue* qu=new queue;
qu->size = 0;
for (int i = 0; i < maxsize; i++)//初始化的时候给一定要逐个初始化
{
qu->data[i] = NULL;
}
return qu;
}
-
队列的入队操作
//入队操作
void queue_push(queue* qu,void* data)//传入的一般是一个数组元素,因为方便
{
qu->data[qu->size] = data;
qu->size++;
}
-
队列的出队操作
void queue_pop(queue* qu)
{
void* a = qu->data[0];
cout << "出队的元素为" << *(int*)(qu->data[0]) << endl;
for (int i = 0; i < maxsize; i++)
{
qu->data[i] = qu->data[i + 1];
}
qu->size--;
}
-
队列显示全部元素:
void queue_print(queue* qu) { for (int i = 0; i < qu->size; i++) { cout << *(int*)(qu->data[i]) << endl; } }
-
队列的相关操作
int main()
{
queue*qu = queue_init();
int num[] = {1,2,3,4,5,6};
for (int i = 0; i < 6; i++)
{
queue_push(qu,&num[i]);
}
queue_print(qu);
queue_pop(qu);
queue_print(qu);
system("pause");
return 0;
}
3、队列的vector实现方法(仍然还是顺序存储)
#include<iostream>
using namespace std;
#include<vector>
class myqueue
{
public:
vector<int> data;
public:
//入队
void enqueue(int val)
{
data.push_back(val);
}
//出队
void dequeue()
{
cout << "出队的元素为" << data.front() << endl;
data.erase(data.begin());
}
//显示队中所有的元素
void print()
{
for (vector<int>::iterator it = data.begin(); it != data.end(); it++)
{
cout << *it << endl;
}
}
};
int main()
{
myqueue qu;
for(int i=0;i<5;i++)
qu.enqueue(i);
qu.dequeue();
qu.print();
qu.dequeue();
qu.print();
system("pause");
return 0;
}
4、队列的链式存储
这个只是在链表的操作上写的接口函数规定相应的功能

浙公网安备 33010602011771号