链式循环队列

#include<stdio.h>
#include<stdlib.h>
typedef char QEleType;
typedef int Status;
#define  OK  1
#define  ERROR  0
#define  OVERLOW  -2
#define  TRUE  1
#define  FALSE  0
struct queueNode{//链式队列的节点类型
    QEleType data;
    struct queueNode *next;
}queue;
typedef struct{
    struct queueNode *front;
    struct queueNode *rear;
}LinkQueue;//链式队列类型
Status InitLinkQueue(LinkQueue &Q){
    //初始化创建空队列Q
Q.front=Q.rear=(struct queueNode *)malloc(sizeof(struct queueNode));
//获取头结点,并使Q.front与Q.rear均指向该头结点
if(!Q.front)return  OVERLOW;//存储空间分配失败
Q.front->next=NULL;
return OK;
}
Status queueIsEmpty(LinkQueue &Q){
    if(Q.front==Q.rear) return TRUE;//队列为空
    else return FALSE;//队列非空
}
Status insertQueue(LinkQueue &Q,QEleType &e){
 //在链式队列Q的队尾端插入元素e;
 struct queueNode *p;
 p=(struct queueNode *)malloc(sizeof(struct queueNode));//分配新节点
 if(!p)return OVERLOW;//存储空间分配失败
 p->data=e;p->next=NULL;
 Q.rear->next=p;//在队尾插入新节点
 Q.rear=p;      //rear指向新的队尾节点
 return OK;
}
Status deleteQueue(LinkQueue &Q,QEleType &e){
 //在链式队列Q的队尾端插入元素e;
 struct queueNode *p;
 if(Q.front==Q.rear)return ERROR;//队空则操作出错
 p=Q.front->next;
 e=p->data;
 Q.front->next=p->next;
 if(p==Q.rear)  //p结点即是队头结点,又是队尾结点时,
 Q.rear=Q.front;//使rear指向链表头结点
 free(p);
 return OK;
}
Status getFront(LinkQueue &Q,QEleType &e){
    //取队列Q的队头元素值
 if(Q.front==Q.rear)return ERROR;//队空,则操作出错
 e=Q.front->next->data;
 return OK;
}
int  main()
{ LinkQueue Q;
  char e;
  InitLinkQueue(Q);
  queueIsEmpty(Q);
  insertQueue(Q,e);
  deleteQueue(Q,e);
  getFront(Q,e);
  return 0;
}
时间: 2024-08-09 02:19:50

链式循环队列的相关文章

_DataStructure_C_Impl:只有队尾指针的链式循环队列

//_DataStructure_C_Impl: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef char DataType; typedef struct snode{ //链式堆栈结点类型定义 DataType data; struct snode *next; }LSNode; typedef struct QNode{ //只有队尾指针的链式循环队列类型定义 DataType dat

顺序循环队列和链式存储队列(带头结点和不带头结点)

1.顺序存储的循环队列 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 5 typedef int ElementType; 6 typedef int Position; 7 typedef struct QNode* PtrToNode; 8 struct QNode { 9 ElementType *Data; 10 Position Front, Rear; 11 int M

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

大话数据结构----循环队列和链式队列

队列(Queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 队列的特点就是:先进先出,和生活中排队的例子是很先进的,排队的目的不就是先到先得吗. 生活中的队列相当于顺序存储的队列,在火车站排队买票,前面的人买完票走了,后面的人一个一个往前移一位,这是很正常的事情,而计算机中队列队列第一个元素出去了,后面的元素一个一个往前移,这是一件很降低效率的一件事.为了解决这种效率问题,计算机采用循环队列的方式操作队数据. 循环队列 队列的头尾相接的顺序存储结构称为循环队列. 1.首先循环

c++实验5 顺序/链式队列

链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可自行对类中所定义的操作进行扩展. 所加载的库函数或常量定义及类的定义: #include<stdlib.h> #include<iostream> using namespace std; typedef int DataType; class SeqQueue{ private: D

数据结构-队列-顺序链式存储

定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队:删除元素称为出队或离队. 队列的操作 队列不可以读取对中间的元素. 队列的存储结构 顺序存储 链式存储 顺序存储 队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针front 和rear分别指示队头元素和队尾元素的位置. 设队头指针指向队头元素,队尾指针指向队尾 元素的下一个位置(也可以让rear指向队尾元素,front指向队头元

队列(FIFO)—循环队列、队列的链式存储

1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表,线性表的特性队列都拥有. 3 循环队列的实现及关键点 3.1 关键点 1)队列为空的条件:队头指针等于队尾指针,即head == tial: 2)队列中保留一个元素空间,当队列满时,尾指针和头指针之间还剩一个元素空间.队列为满的条件:(tial + 1) % quenceSize == head:

c语言描述-链式队列与循环队列

我真的不喜欢写代码 队列的特点 先进先出,即只能从队尾插入元素,从队头删除元素 队列的链式存储结构 #include<stdio.h> #include <stdlib.h> #include<malloc.h> typedef struct QNode { int date; struct QNode *next; }QNode ,*QueuePtr; typedef struct { int size; //记录队列长度 QueuePtr front; //头指针

数据结构--顺序循环队列和链式队列

第一部分:顺序循环队列的实现 1 //循环队列的实现 2 #define OK 1 3 #define MAXSIZE_Q 10 4 //#define OVERFLOW -2 5 #define ERROR 0 6 7 typedef int Status; 8 typedef int QElemtype; 9 10 typedef struct{ 11 QElemtype *base; //初始化的动态分配存储空间 12 int front; //队头指针 13 int rear; //队尾