数据结构之---C语言实现链式队列

//链式队列的存储
//杨鑫
#include <stdio.h>
#include <stdlib.h>
typedef int QElemType;

//定义节点
typedef struct QNode
{
		QElemType data;
		struct QNode *next;
}QNode, *QueuePtr;

//定义指针
typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

//插入元素e进入队列
void en_Queue(LinkQueue *q, QElemType e)
{
	QueuePtr temp = (QueuePtr)malloc(sizeof(QNode));
	if(temp)
	{
		temp->data = e;
		temp->next = NULL;
		q->rear->next = temp;
		q->rear = temp;
	}
}

//初始化队列
void init_Queue(LinkQueue *q)
{
		q->front = q->rear = (QNode *)malloc(sizeof(QNode));
		q->front->next = NULL;
}

//创建队列
void create_Queue(LinkQueue *q)
{
		int n = 0;
		init_Queue(q);
		printf("请输入要进入队列的元素,以0结束!\n");
		while(scanf("%d", &n))
		{
			if(n == 0)
					break;
			en_Queue(q, n);
		}
}

//e元素出队
void de_Queue(LinkQueue *q, QElemType *e)
{
	if(q->front == q->rear)
			return;
	QueuePtr temp = q->front->next;
	if(q->front->next == q->rear)
			q->rear = q->front;
	*e = temp->data;
	q->front->next = temp->next;
	free(temp);
}

//判断队列是否为空
int is_Empty(LinkQueue *q)
{
	if(q->front == q->rear)
			return 1;
	return 0;
}

//返回队列
int getlength_Queue(LinkQueue *q)
{
	QueuePtr temp = q->front;
	int i = 0;
	while(temp != q->rear)
	{
		++i;
		temp = temp->next;
	}
	return i;
}

//清空队列
void clear(LinkQueue *q)
{
	QueuePtr temp = q->front->next;
	while(temp)
	{
		QueuePtr tp = temp;
		temp = temp->next;
		free(tp);
	}
	temp = q->front;
	q->front = q->rear = NULL;
	free(temp);
}

//打印队列元素
void print_Queue(LinkQueue *q)
{
		if(q->front == q->rear)
				return;
		QueuePtr temp = q->front->next;
		while(temp != q->rear)
		{
			printf("%d ", temp->data);
			temp = temp->next;
		}
		printf("%d", temp->data);
		printf("\n");
}

//第一个数据出队
void top_Queue(LinkQueue *q, QElemType *e)
{
	if(q->front == q->rear)
			return;
	*e = q->front->next->data;
}

int main()
{
		int i = 0, k = 0, top = 0;
		int len;
		LinkQueue q;
		create_Queue(&q);
		top_Queue(&q, &top);
		printf("队头的元素为:%d\n", top);
		len = getlength_Queue(&q);
		printf("遍历队中的所有元素:\n");
		for(i = 0; i < len; i++)
		{
			de_Queue(&q, &k);
			printf("%d ", k);
		}
		printf("\n");
		clear(&q);
		return 0;
}

时间: 2024-11-08 19:17:05

数据结构之---C语言实现链式队列的相关文章

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; //头指针

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

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

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

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

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

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

链式队列(Linked Queue)

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

链式队列的C++实现

链式队列的C++实现 一.数据结构 struct QNode //定义队列结点的数据结构 { QNode *next; //指针域,指向下一个结点 double data; //数据域,存储队列信息 }; struct LinkQueue //定义队列的数据结构 { QNode *front; //队首指针,指向QNode类型的指针 QNode *rear; //队尾指针 }; void InitQueue(LinkQueue &Q) //构造一个空的队列 int IsEmpty(LinkQue

链式队列基本操作的实现问题

问题描述:用链式存储方式实现队列的基本操作 涉及变量:front:Node型自定义变量,指向队首元素 rear:Node型自定义变量,指向队尾元素 涉及教材:<数据结构--Java语言描述(第2版)> 清华大学出版社 大致思路: 链式存储结构不害怕出队列会浪费空间,因此也不需要要循环结构来节约空间 front为指向队首结点的指针 rear为指向队尾结点的指针 初始化时它们均指向空 初始化代码如下: 队列的置空方法与初始化相类似 而判断队列是否为空只需要判断队首指针是否指向非空元素即可 代码如下

链式队列的实现

链式队列数据结构如下: typedef struct qnode{ ElemType data; struct qnode* next; //指向下一节点指针 }QNode; typedef struct{ QNode* front; //队首指针 QNode* rear; //队尾指针 }ListQueue; 实现以下函数: void InitQueue(ListQueue* &q); //初始化队列 void ClearQueue(ListQueue* &q); //清空队列 int

顺序队列和链式队列的实现

队列是一种常用的数据结构,它跟栈一样,操作都受到限制,队列只允许从一端进数据,另一端出数据.队列跟栈不同,栈是一种"后进先出"的模式,而队列是一种"先进先出"的操作模式.就好比日常排队一样,先排队的先出,后排队的后出.例如,进入队列的顺序是1,2,3,4,5则出队列的顺序是1,2,3,4,5(只考虑一次性出列的情况). 队列也分顺序队列和链式队列,跟顺序栈和链表栈一样,顺序队列同样是基于数组实现,链式队列则是基于链表实现. 顺序队列: //顺序队列 #include