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 ...
随机推荐
- 会话—session
这篇随笔是上一篇的姊妹篇@_@! session 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下) ...
- 安装ie10慢的解决办法
下面是win7安装ie10的先决条件: http://support.microsoft.com/kb/2818833
- C#中如何查找Dictionary中的重复值
简介 在这篇帮助文档中,我将向你展示如何实现c#里字典中重复值的查找.你知道的对于一个老鸟来说,这是非常简单的代码.但是尽管如此,这也是一篇对c#初学者非常有用的帮助文档. 背景 多数程序员对小型数据 ...
- 零基础Android学习笔记-03 窗口间的数据传递
1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...
- Cocos2d-JS使用CocosDenshion引擎
Cocos2d-JS提供了一个音频CocosDenshion引擎.具体使用的API是cc.AudioEngine.cc.AudioEngine有几个常用的函数:playMusic(url, loop) ...
- Linux 线程 条件变量
一:条件变量 直接上最基本的两个函数,先抓主要矛盾: //等待条件 int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex ...
- 开始ubuntu 14.04 的装X模式---终端模式下中文输入,听歌,上irc 开启framebuffer看电影 截图
先上图吧 卡卡的全是在tty1 下的操作,看电影,听歌,截图 ,看图 ,上irc 等等,相当适合在小白面前装屁! 需要安装的软件: 为了能正常显示中文:安装fbterm sudo apt-get i ...
- html5离线应用详摘
html5离线应用详摘 在html文件里配置如下: <html manifest=”name.manifest”> 在name.manifest文件里配置如下: CACHE MANIFES ...
- Java基础(二)
下面来实现一个小程序,要求如下: 从键盘接收一个字符串,程序对其中所有的字符进行排序,例如键盘输入:helloitcast程序打印acehillostt 步骤分析: 1.键盘录入字符串,Scanner ...
- nginx配置:支持phpfastcgi,nginx和php-cgi通信,部分nginx常量解释
支持phpfastcgi的配置如下: server { listen 8000; server_name localhost; root F:/home/projects/test; i ...