队列的链式存储实现c语言

队列的链式存储

与栈相反,队列是一种先进先出(FIFO)的线性表     FIFO:first in first out

c语言实现,bool,引用为c++中先忽略

#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef int ElemType;
typedef struct QNode{    //结点的定义
ElemType data;
QNode *next;
}QNode,*QueuePtr;
typedef struct      //链式存储队列的定义
{
QueuePtr front;   //头指针
QueuePtr rear;    //尾指针
}LinkQueue;
bool InitQueue(LinkQueue &Q)  //队列的初始化
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); 
if(!Q.front) return false;
Q.front->next=NULL;
return true;
}
bool EmptyQueue(LinkQueue Q)  //判断队列是否为空
{
if(Q.front==Q.rear) return true;
else return false;
}
int GetNumber(LinkQueue Q)   //返回队列元素个数
{
int count=1;
QueuePtr q=Q.front->next; //将q指向第一个元素的结点
while(q!=NULL)
{
q=q->next;
count++;
}
return count;
}
bool ClearQueue(LinkQueue &Q)  //清空队列
{
QueuePtr q=Q.front->next;
if(!q) return false;
while(q!=NULL)
{
free(Q.front);   //释放结点
Q.front=q;
q=q->next;
}
return true;
}
bool DestoryQueue(LinkQueue &Q){
	QueuePtr q=Q.front;
	if(!q) return false;
	while(q!=NULL)
	{
		Q.rear = Q.front->next;
		free(Q.front);
		Q.front = Q.rear;
	}
	return true;
    }
    return true;
}
bool EnQueue(LinkQueue &Q,ElemType elem)  //入队
{
QueuePtr q=(QueuePtr)malloc(sizeof(QNode));  //初始化新结点
if(!q) return false;
q->next=NULL;             //指针域赋空
q->data=elem;            
Q.rear->next=q;         //链接q结点
Q.rear=q;               //移动尾指针
return true;
}
bool DeQueue(LinkQueue &Q,ElemType &elem) //出队
{
QueuePtr q=Q.front->next;
if(!q) return false;
    Q.front=q->next;
elem=q->data;
free(q);      //释放结点
return true;
}
void QueueTraverse(LinkQueue Q)  //队列的遍历
{
QueuePtr q=Q.front->next;
while(q!=NULL)
{
printf("%3i",q->data);
q=q->next;
}
printf("\n");
}
int main()
{
int elem1=1;
int elem2=2;
int elem3=3;
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,elem1);
EnQueue(Q,elem2);
EnQueue(Q,elem3);
printf("队列元素个数 %i\n",GetNumber(Q));
printf("队列的遍历:");
QueueTraverse(Q);
ClearQueue(Q);  
if(EmptyQueue(Q)) printf("队空");
DestoryQueue(Q);
return 0;
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言实现队列链式存储是通过使用链表来表示队列数据结构。在给定的代码中,linkqueue.h头文件中定义了队列的结构体和相关操作的函数声明。在main函数中,先调用InitQueue函数初始化队列,然后使用EnQueue函数将数组元素逐个入队。使用GetHead函数获取队列头部元素,并使用QueueLength函数获取队列的长度。接下来使用循环和DeQueue函数将队列元素逐个出队并打印出来。最后返回0表示程序执行成功。 在linkqueue.h文件中,InitQueue函数用于初始化队列,即生成新的结点作为头节点,并让头尾指针指向它。EnQueue函数用于将元素入队,在队尾添加新的结点。 DeQueue函数用于将队头元素出队,并将出队的元素返回给调用者。同时需要注意更新队尾指针的位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构(C语言版)严蔚敏->队列的顺序存储(循环队列)和链式存储](https://blog.csdn.net/qq_45404396/article/details/125662517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [队列链式存储C语言实现)](https://blog.csdn.net/weixin_46272577/article/details/111287996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值