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、队列的链式存储
这个只是在链表的操作上写的接口函数规定相应的功能
posted @ 2022-09-04 09:11  铜锣湾陈昊男  阅读(16)  评论(0)    收藏  举报