c语言编程之循环队列
利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记。入队flag++,出队flag--
#include"stdio.h"
typedef int element;
typedef struct Node{
struct Node *next;
element data;
}*pNode;
typedef struct QNode{
pNode front,rear;
element flag;
}*Linknode;
//init a empty queue
element Init_queue(Linknode *pLinknode)
{
Linknode P;
P=*pLinknode;
P->front=P->rear=(pNode)malloc(sizeof(struct Node));
P->front->next=NULL;
P->rear->next=P->front; // make loop queue font linked rear,in usuall queue this is P->rear->next=NULL;make a change become
//Loop queue;
P->flag=;
}
//add a data to queue rear
element Add_queue(Linknode *pLinknode,int num)
{
Linknode P;
P=*pLinknode;
pNode s=(pNode)malloc(sizeof(struct Node));
s->data=num;
s->next=P->front; //in this position we can see the new add memory s is point to front,in usuall queue we can see s->next=NULL;
P->rear->next=s;
P->rear=s;
++P->flag;
printf("add data:%d add flag:%d\n",P->rear->data,P->flag);
}
{
if((*pLinknode)->flag==)
{
printf("queue is empty\n");
return ;
}
//if(((*pLinknode)->front)==((*pLinknode)->rear))
// {
// printf("queue is empty!!");
// return 0;
// }
Linknode P;
pNode k;
P=*pLinknode;
k=P->front->next;
P->front->next=k->next;
printf("delet data:%d\n",k->data);
//--P->flag;
free(k);
printf("delete flag:%d\n",P->flag);
--P->flag;
return ;
} element Print_queue(Linknode pLinknode)
{
pNode p;
p=pLinknode->front;
while(p!=pLinknode->rear&&pLinknode->flag) //it is importand,because in loop queue fornt==rear can means empty or full,it is a //loop,we can't determin this loop queue is empty by using front==rear,must add num as flag;
{
p=p->next;
printf("data:%d\n",p->data);
}
return ;
}
element main()
{
Linknode pQnode;
pQnode=(Linknode)malloc(sizeof(struct QNode));
Init_queue(&pQnode);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Print_queue(pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Print_queue(pQnode);
return ;
}
c语言编程之循环队列的更多相关文章
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...
- C语言实现使用动态数组实现循环队列
我在上一篇博客<C语言实现使用静态数组实现循环队列>中实现了使用静态数组来模拟队列的操作. 因为数组的大小已经被指定.无法动态的扩展. 所以在这篇博客中,我换成动态数组来实现. 动态数组能 ...
- C语言循环队列
#include<stdio.h> #include<stdlib.h> #include<string.h> //循环队列 typedef struct { in ...
- 数据结构(C语言版)---第三章栈和队列 3.4.2 队列的链式表示和实现(循环队列)
这个是循环队列的实现,至于串及数组这两章,等有空再看,下面将学习树. 源码如下: #include <stdio.h> #include <stdlib.h> #define ...
- 数据结构:循环队列(C语言实现)
生活中有非常多队列的影子,比方打饭排队,买火车票排队问题等,能够说与时间相关的问题,一般都会涉及到队列问题:从生活中,能够抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结 ...
- C++编程练习(5)----“实现简单的循环队列的顺序存储结构“
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端 ...
- C语言实现循环队列
今日在处理数据存储的问题中,数据占用的空间较大,在询问之下,提及循环队列. 没有学习过的我,想想就是头大,只能慢慢从网上找资料,一个字母一个字母的敲,最后,还是慢慢的对队列有了一些理解 对于循环队列有 ...
- C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2
/*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...
随机推荐
- oracle中的instr()
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字符的结尾就结束. ...
- Ionic Android开发环境搭建 下
上篇 Ionic 安装完成了,由于要开发Android,所以必不可少需要继续搭建Android开发环境. 首先,下载并安装JDK.然后配置一下环境变量. 接着,下载并安装Android SDK.下载过 ...
- 一.CSS工作原理
CSS全称层叠样式表,它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.是能够真正做到网页表现与内容分离的一种样式设计语言,能够对网页 ...
- C#反射(转载)
[转]C#反射 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等. ...
- Java之组合数组2
编写函数Fun,其功能是将两个两位数的正整数A.B合并为一个整数放在C中,将A数的十位和个位一次放在C的个位和十位上,A数的十位和个位一次放在C的百位和千位上.例如,当 A=16,B=35,调用该函数 ...
- UI5_UINavigation传值
// // AppDelegate.m // UI5_UINavigation传值 // // Created by zhangxueming on 15/7/7. // Copyright (c) ...
- 16款最佳HTML5超酷动画演示及源码
1.HTML5/CSS3图片选择动画 可选择多张图片 之前我们已经分享过几款很酷的HTML5图片特效,像HTML5 3D图片折叠特效.HTML5 3D旋转图片相册等应用.今天我们来分享一款既炫酷又实用 ...
- 《JavaScript高级程序设计》心得笔记-----第三篇章
第十章 1. DOM1级定义了一个Node接口,以Node类型实现(除IE以外),为了确保跨浏览器兼容,最好用nodeType属性与数字数值进行比较(someNode. nodeType==1) ...
- 阿里巴巴2013年实习生笔试题A
一.单项选择题 1.下列说法不正确的是:(B) A.SATA硬盘的速度速度大约为500Mbps/s B.读取18XDVD光盘数据的速度为1Gbps C.前兆以太网的数据读取速度为1Gpbs D.读取D ...
- 清空系统日志shell scripts——自学笔记
这是一个清空系统日志的脚本: vim logmess_clean.sh #bin/bash //该脚本所使用的shell解释器 cd /var/log/ //切换到存放日志目录 ech ...