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

来源:互联网 发布:数据库关系模型的概念 编辑:程序博客网 时间:2024/05/18 00:31

队列的链式存储

队列的基本操作c语言实现

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

#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)
{
free(Q.front);
q=q->next;
Q.front=q;
}
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;
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二年级学生粗心怎么办 学生做题粗心怎么办 小学生做题粗心怎么办 审题总是不认真怎么办 好学生批评了怎么办 地生会考没考好怎么办 一年级孩子抄作业怎么办 孩子抄作业慢怎么办 孩子撒谎抄作业怎么办 孩子不肯做作业怎么办? 同桌抄我答案怎么办 初中孩子抄作业怎么办 小孩子做题马虎怎么办 数学做题马虎怎么办 小朋友做题粗心怎么办 孩子老是落题怎么办 脑子笨反应慢怎么办 脑子笨的人怎么办 孩子学习反应慢怎么办 孩子学习不入门怎么办 高三出现厌学怎么办 天生笨的人怎么办 学生考试粗心该怎么办 高三学生失眠怎么办 期末考试考差了怎么办 小孩考试太粗心怎么办 带孩子太粗心怎么办 小孩做数学粗心怎么办 小学一年级学生厌学怎么办 小学二年级厌学怎么办 做题做的烦躁了怎么办 英语不会做题怎么办 孩子审题不细心怎么办 生孩子有恐惧症怎么办 小孩不喜欢上幼儿园怎么办 小孩不喜欢去幼儿园怎么办 小孩不喜欢学生字怎么办 学生不喜欢补课老师怎么办 小孩不喜欢上学逃课怎么办 一年级小朋友不爱写字怎么办 幼儿园小朋友不爱写字怎么办