不带头结点的链式队列进出队操作

/*
不带头结点的链式队列进出队操作
*/
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
typedef struct QNode *Queue;
typedef struct Node{
	ElementType Data;
	struct Node *Next;
};
typedef struct QNode{
	struct Node *front;
	struct Node *rear;
};
void InintQueue(Queue &PtrQ){//虽然是指针,但是没赋值之前也不能乱指
	PtrQ = (Queue)malloc(sizeof(struct QNode));
	PtrQ->front=PtrQ->rear=NULL;
}

bool EnQueue(Queue PtrQ, ElementType X){
	struct Node *RearCell = PtrQ->rear;
	struct Node *Tmp = (struct Node *)malloc(sizeof(struct Node));
	Tmp->Data = X;
	Tmp->Next=NULL;
	if(PtrQ->front==NULL)//队列为空,进第一个元素
		PtrQ->rear=PtrQ->front=Tmp;
	else{
		PtrQ->rear->Next = Tmp;
		PtrQ->rear = Tmp;
	}
	return true;
}
ElementType DeleteQ(Queue PtrQ){
	struct Node *FrontCell;
	ElementType FrontElem;
	if(PtrQ->front==NULL){
		printf("队列为空\n");
		return 1;
	}
	FrontCell = PtrQ->front;
	if(PtrQ->front==PtrQ->rear)//若队列中只有一个元素
		PtrQ->front=PtrQ->rear=NULL;//删除后置空
	else
		PtrQ->front = PtrQ->front->Next;
	FrontElem = FrontCell->Data;
	free(FrontCell);
	return FrontElem;
}
Is_EmptyQ(Queue PtrQ){
	return PtrQ->front==NULL;
}

int main(){
	Queue PtrQ;
	InintQueue(PtrQ);
	for(int i = 0;i<10;i++)
		EnQueue(PtrQ,i);
	while(!Is_EmptyQ(PtrQ))
		printf("%d\n",DeleteQ(PtrQ));
	return 0;
}

  

时间: 2024-10-11 07:22:38

不带头结点的链式队列进出队操作的相关文章

//_DataStructure_C_Impl:链式队列

//_DataStructure_C_Impl:链式队列 #include<stdio.h> #include<stdlib.h> #define MaxSize 100 typedef int DataType; typedef struct QNode{ DataType data; struct QNode *next; }LQNode,*QueuePtr; typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue;

链式队列总结

基本数据结构之-链式队列 链式队列就是一个操作受到限制的单链表,学会了单链表再来写这个就是轻松加愉快,但是貌似我去用了两个小时搞定,主要是基础差! 队列的基本操作就是入栈和出栈,还可以看到对头和对尾 如果维护了长度参数,那么也可以返回一个长度 不说理论了,直接上代码吧! 首先定义基本数据结构的结构体: typedef struct _LINKQUEUENODE { struct _LINKQUEUENODE *next; }LinkQueueNode; typedef struct _LINKQ

链式队列(Linked Queue)

链式队列(Linked Queue) 1. 链式队列的概念 1.1 链式队列的定义 链式队列是基于链表的存储表示实现的队列. 1.2 链式队列中各元素的逻辑及存储关系 链式队列可以采用单链表作为其存储表示,因此,可以在链式队列的声明中用单链表定义它的存储空间. 链式队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点. 注:链式队列的队头元素存放在单链表的第一个结点内,若要从队列中退出一个元素,必须从单链表中删去第一个结点,而存放着新元素的结点应插在队列的队尾,即单链表的最后一

队列(链式队列)

链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看链式队列理解起来更容易?https://www.cnblogs.com/lanhaicode/p/10304567.html) 单向链表 单向链表节点的组成部分 1 struct link 2 { 3 int data; 4 struct link *next; 5 }; 数据域:data----用

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

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

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

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

【数据结构-队列】链式队列

关于链式队列 链式队列又称为链队,是使用单链表实现的,需要一个头指针一个尾指针 结构图: 链队需要的元素组成 /*链式队列的每一个节点*/ struct node{ int data;//存储数据 struct node *next;//指向下一个节点的指针 }; /*链式队列*/ typedef struct{ struct node *head;//头指针 struct node *tail;//尾指针 }LinkedQueue; 创建一个带头节点的空队列 创建一个节点p 将p节点的next

有序链式队列

  编写头文件 struct queue { int num;            //代表数据 int high;           //优先级1111 struct queue *pNext;//存储下一个节点的地址 }; typedef  struct queue Queue;                           //简化队列 Queue * init(Queue *queueHead);                        //初始化 Queue *

数据结构基础(14) --链式队列的设计与实现

链式队列是基于单链表的一种存储表示, 其形状如下图所示: (队列的队头指针指向单链表的第一个结点, 队尾指针指向单链表的最后一个结点, 注意没有无用的空[头/尾]节点) 用单链表表示的链式队列特别适合于数据元素变动比较大的情况, 而且不存在队列满而产生溢出的情况; 链式队列结点构造: [这次我们将节点构造成了类LinkQueue的嵌套类] struct ChainNode { ChainNode(const Type &_data, ChainNode *_next = NULL) :data(