数据结构项目——循环队列与链队列

简介: 数据结构项目——循环队列与链队列

循环队列


代码如下:


#include "pch.h"
#include <iostream>
using namespace std;
#define MAXSIZE 5
struct SqQueue
{
  char* Base;
  int front;
  int rear;
};
//初始化循环队列
int initqueue(SqQueue &q)
{
  q.Base = new char[MAXSIZE];
  if (!q.Base)
  {
    cout << "内存空间分配失败!" << endl;
    return 0;
  }
  q.front = q.rear = 0;
  return 1;
}
//求循环队列的长度
int getqueuelength(SqQueue q)
{
  return (q.rear - q.front + MAXSIZE) % MAXSIZE;
}
//求循环队列的头元素
char getqueuehead(SqQueue q)
{
  return q.Base[q.front];   //q.front 是下标位置
}
//循环队列的入队
int insertqueue(SqQueue &q, char e)
{
  if ((q.rear+1)%MAXSIZE==q.front)//这样队列就满了
  {
    cout << "队列已满,无法继续插入队列!" << endl;
    return 0;
  }
  q.Base[q.rear] = e;
  q.rear = (q.rear + 1) % MAXSIZE;
  cout << "入队列成功!" << endl;
  return 1;
}
//循环队列的出队列
int outputqueue(SqQueue &q, char e)
{
  if (q.rear==q.front)
  {
    cout << "队列为空,无法出队列!" << endl;
    return 0;
  }
  e=q.Base[q.front];
  q.front = (q.front + 1) % MAXSIZE;
  cout << "出队列成功!" << endl;
  return 1;
}
int main()
{
  SqQueue q;
  initqueue(q);
  insertqueue(q, 'a');
  insertqueue(q, 'b');
  insertqueue(q, 'c');
  cout << getqueuehead(q) << endl;;
  char c='a';
  outputqueue(q,c);
  cout << getqueuehead(q) << endl;
  outputqueue(q, c);
  cout << getqueuehead(q) << endl;
  cout << "循环队列的长度为:" << getqueuelength(q) << endl;
  return 0;
}


结果为:



链队列


代码如下:


#include "pch.h"
#include <iostream>
using namespace std;
//链队列
typedef struct qnode
{
  char data;
  qnode *next;
}*queueper;
//头指针和尾指针
struct linkqueue
{
  queueper front;   //队列的尾指针
  queueper rear;    //队列的头指针
};
//初始化队列
int initlinkqueue(linkqueue &q)
{
  //创建新节点设置为头,队尾队头志向该节点
  q.front = q.rear = new qnode;
  q.rear->next = NULL;//头结点指针域设置为空
  return 0;
}
//获取队列的头元素
char getqueueHead(linkqueue q)
{
  if (q.front!=q.rear)
  {
    return q.front->next->data;
  }
}
//链队列入队列
int insertelem(linkqueue &q,char e)
{
  queueper p;
  p = new qnode;
  p->data = e;
  p->next = NULL;
  q.rear->next = p; //将新节点插入到队列的尾部(后插法)
  q.rear = p;     //尾指针指向尾结点
  cout << "队列入队成功!" << endl;
  return 0;
}
//链队列出队列
int outputqueue(linkqueue &q, char &e)
{
  queueper p;
  if (q.rear==q.front)
  {
    cout << "队列为空,无法出队列!" << endl;
    return 0;
  }
  p = q.front->next;    //指向队头元素
  e = p->data;      //得到队头元素的数据域
  q.front->next = p->next;//修改头指针
  if (q.front==p)
  {
    q.rear = q.front;
  }
  delete p;
  cout << "出队列成功!" << endl;
  return 1;
}
int main()
{
  linkqueue q;
  initlinkqueue(q);
  insertelem(q, 'a');
  insertelem(q, 'b');
  insertelem(q, 'c');
  insertelem(q, 'd');
  cout << "队列的头元素为:" << getqueueHead(q) << endl;
  char e = 'a';
  outputqueue(q, e);
  cout << "队列的头元素为:" << getqueueHead(q) << endl; 
  outputqueue(q, e);
  cout << "队列的头元素为:" << getqueueHead(q) << endl;
  return 0;


结果为:


相关文章
|
7月前
|
存储 Java 容器
深入浅出 栈和队列(附加循环队列、双端队列)
深入浅出 栈和队列(附加循环队列、双端队列)
|
7月前
|
存储
【数据结构】循环队列
【数据结构】循环队列
66 0
|
7月前
|
存储 编译器 C语言
【数据结构】C语言实现链队列(附完整运行代码)
【数据结构】C语言实现链队列(附完整运行代码)
137 0
|
7月前
|
算法 调度 C++
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
167 0
数据结构第九弹---循环队列
数据结构第九弹---循环队列
|
6月前
|
存储 算法
【数据结构和算法】--队列的特殊结构-循环队列
【数据结构和算法】--队列的特殊结构-循环队列
36 0
|
2月前
|
存储
【初阶数据结构】深入解析循环队列:探索底层逻辑
【初阶数据结构】深入解析循环队列:探索底层逻辑
|
5月前
|
存储 索引
【数据结构OJ题】设计循环队列
力扣题目——设计循环队列
38 1
【数据结构OJ题】设计循环队列
|
4月前
|
算法
【数据结构与算法】循环队列
【数据结构与算法】循环队列
35 0
|
4月前
|
算法
【数据结构与算法】链队列
【数据结构与算法】链队列
24 0