赞
踩
tips:前些天学习了链表和栈,今天来看看c语言数据结构之队列的实现以及队列的各种操作。
队列的特点是先进先出,后进后出,因此我们很容易就能够想到用单链表的尾插法,和头部删除法去实现队列的入队和出队的操作。
首先我们来看一下队列的各种操作的实现思路以及具体实现过程
准备工作:
//定义结点
typedef struct tag
{
int val;//队列(链表)的值
struct tag *pNext;
}Node,*pNode;
//定义队列
typedef struct tagQueue
{
pNode phead, ptail;//队头队尾指针,分别指向头结点和尾结点
}Queue,*pQueue;
//测试输出队列元素
void print_queue(pQueue p)
{
pNode pcur = p->phead;//定义工具人,保存当前结点信息
while (pcur!=NULL)
{
printf("%d\n", pcur->val);
pcur = pcur->pNext;
}
printf("------------------------------------------\n");
}
1、入队(enQueue)
思路:
具体实现:
//入队 void enQueue(pQueue p,int val) { pNode pnew = (pNode)calloc(1,sizeof(Node));//为新结点申请空间并初始化 pnew->val = val;//插入的值 //入队 if (p->phead == NULL)//判断队列是否为空 { //为空,头尾指针指向第一个结点 p->phead = pnew; p->ptail = pnew; } else { //不为空,尾插法 p->ptail->pNext = pnew;//新结点放在原来尾结点后面 p->ptail = pnew;//新结点变成尾结点 } }
2、出队(deQueue)
思路:
具体实现:
//出队 void deQueue(pQueue p) { //出队,头部删除法 pNode pcur;//工具人,指向当前结点 pcur = p->phead; if (p->phead == NULL) { //队列为空 printf("队列为空!\n"); } else { //头部删除法 p->phead = p->phead->pNext;//头结点后移 //释放空间 free(pcur); } }
3、判断队列是否为空(isEmpty)
思路:
总之判断方法很多,大家可以尽情发挥。
具体实现:
//判断队列是否为空
int isEmpty(pQueue p)
{
if (p->phead == NULL)
return 1;//为空
else
return 0;
}
至此队列的基本操作我们已经全部实现了,接下来我们在main()函数中测试一下:
int main() { //定义一个队列,并初始化 //队列是先进先出,用尾插法和头部删除法实现进队和出队 Queue que; int val; char panduan;//判断是否出队(y/n) memset(&que,0,sizeof(Queue));//memset主要是用来对空间初始化的 //循环入队 while (scanf("%d", &val) != EOF) { //入队 enQueue(&que, val); } //打印队列元素 printf("队列中的元素为:\n"); print_queue(&que); //判断队列是否为空 if (isEmpty(&que)) { printf("队列为空!\n"); } else { printf("队列不为空!\n"); } printf("------------------------------------------\n"); while (printf("是否出队?y/n:"), scanf("%c", &panduan) != NULL) { if (panduan == 'y') { //出队 deQueue(&que); //打印元素 print_queue(&que); //判断队列是否为空 if (isEmpty(&que)) { printf("队列为空!\n"); } else { printf("队列不为空!\n"); } printf("---------------------------------\n"); } else if (panduan == 'n') { break; } } return 0; }
实现结果:
队列的操作到目前来说已经实现,希望对大家的学习能够有所帮助,加油!
tips:为了不让生活留下遗憾和后悔,我们应该尽可能地抓住一切改变生活的机会。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。