博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)...
阅读量:6849 次
发布时间:2019-06-26

本文共 2679 字,大约阅读时间需要 8 分钟。

下午把队列的各种操作用链表实现了一下,建立,插入元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空,源代码调试已经通过,运行结果如下图所示:

 

#include "iostream"using namespace std;typedef struct student{	int data;	struct student * next;}node;//定义结构体节点typedef struct linkqueue{	node * first;	node * rear;}queue;//定义队列结构,首指针和尾指针/*******************************函数名:void initqueue(queue *HQ)功能:初始化  把队首和队尾指针置空********************************/void initqueue(queue *HQ){   HQ->first=HQ->rear=NULL;}/**************************************函数名:queue *insert(queue *HQ,int x)功能:向队列中添加一个新元素,在尾节点之后***************************************/queue *insert(queue *HQ,int x){    node * s;	s=new node;	s->data=x;	s->next=NULL;	if (HQ->rear==NULL)	{		HQ->first=s;		HQ->rear=s;	}	else	{		HQ->rear->next=s;		HQ->rear=s;	}	return HQ;	}/******************************函数名:int delqueue(queue *HQ)功能:从队列中删除一个元素********************************/int delqueue(queue *HQ){    node *p;    int temp;    /*若链队为空则停止运行*/    if(HQ->first==NULL)    {      printf("队列为空,无法删除! ");      exit(1);    }    temp=HQ->first->data;    /*暂存队首元素以便返回*/    p=HQ->first;    /*暂存队首指针以便回收队尾结点*/    HQ->first=p->next;   /*使队首指针指向下一个结点*/    /*若删除后链队为空,则需同时使队尾指针为空*/    if(HQ->first==NULL)    {      HQ->rear=NULL;    }    free(p);      /*回收原队首结点*/    return temp;    /*返回被删除的队首元素值*/}/*******************************函数名:int readqueue(queue *HQ)功能:读取队首元素*********************************/int readqueue(queue *HQ){   /*若链队为空则停止运行*/    if(HQ->first==NULL)    {      cout<<"队列为空,无法删除! ";       exit(1);    }    return HQ->first->data;      /*返回队首元素*/}/*************************************************函数名:int emptyqueue(queue *HQ)功能:检查链队是否为空,若为空则返回1,否则返回0************************************************/int emptyqueue(queue *HQ){   /*判断队首或队尾任一个指针是否为空即可*/   if(HQ->first==NULL)   {      return 1;   }   else   {      return 0;   }}/***********************************函数名:void clearqueue(queue *HQ)功能:清除链队中的所有元素************************************/void clearqueue(queue *HQ){   node *p=HQ->first;    /*队首指针赋给p*/   /*依次删除队列中的每一个结点,最后使队首指针为空*/   while(p!=NULL)   {       HQ->first=HQ->first->next;       free(p);       p=HQ->first;   }   /*循环结束后队首指针已经为空*/   HQ->rear=NULL;    /*置队尾指针为空*/ }/*******************************函数名:void readall(queue *HQ)功能:输出链队中的所有元素*********************************/void readall(queue *HQ){	node *p=HQ->first;	while (p!=NULL)	{		cout<
data<
next; }}void main(){ queue q; int a[5]={1,2,3,4,5}; int i; initqueue(&q); for(i=0;i<5;i++) { insert(&q,a[i]); }//队列中插入数据 1,2,3,4,5 cout<
<<"读取队列中全部的数据:\n"; readall(&q);//读取队列中全部数据 insert(&q,60);//插入一个数据 cout<<"读取的队首节点:"<
<

运行结果:

 

 

 
你可能感兴趣的文章
hiberante 二级缓存设置
查看>>
Sphinx 增量索引更新
查看>>
linux脚本^M: bad interpreter:解决方法
查看>>
javascript 图片上传缩略图预览
查看>>
Java Service Wrapper使用总结
查看>>
Java:concurrent包下面的Map接口框架图(ConcurrentMap接口、ConcurrentHashMap实现类)...
查看>>
c#简单自定义异常处理日志辅助类
查看>>
Hibernate 、 Axis2发布
查看>>
使用IPostBackEventHandler让JavaScript“调用”回传事件
查看>>
深入理解计算机系统(3.1)---走进汇编的世界
查看>>
Shell 利用 curl 模拟登陆
查看>>
DIV相关的操作总结
查看>>
常用DOS命令参数详解
查看>>
CSS3 动画一瞥
查看>>
ZBarReaderView屏幕旋转问题
查看>>
算法:基于 RingBuffer 的 Queue 实现《续》
查看>>
ylb:SQL 系统函数
查看>>
Online SVG to PNG/JPEG/TIFF conversion
查看>>
ubuntu系统自带的火狐(firefox)如何安装Adobe Flash
查看>>
SQL Server创建表超出行最大限制解决方法
查看>>