C语言实现队列(纯C)
1. [代码][C/C++]代码
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode;
typedef struct LinkQueue{
QNode *front;
QNode *rear;
}LinkQueue;
Status InitQueue(LinkQueue *q)
{
q->front=q->rear=(QNode *)malloc(sizeof(QNode));
if(!q->front)
return ERROR;
q->front->next=NULL;
return OK;
}
Status EnQueue(LinkQueue *q,ElemType e)
{
QNode *p=(QNode *)malloc(sizeof(QNode));
if(!p)
return ERROR;
p->data=e;
p->next=NULL;
q->rear->next=p;//入队操作,从队尾(rear)进入
q->rear=p;//相当于rear++,q->rear指向下一个位置
//符合入队操作的基本要求
return OK;
}
Status DeQueue(LinkQueue *q,ElemType *e)
{
QNode *p=(QNode *)malloc(sizeof(QNode));
if(!p)
return ERROR;
p=q->front->next;//q指向的是front指针的下一个位置
//亦即队首元素
*e=p->data;
q->front->next=p->next;//出队操作后,front++
if(q->rear==p)//判断是否全部出队
q->rear=q->front;//如果全部出队,则将队列置为空
return OK;
}
Status Display(LinkQueue *q)
{http://www.huiyi8.com/dongman/weimei/
QNode *p;
p=q->front->next;
while (p)
{唯美动漫图片
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}
Status PrintfQueue(LinkQueue *Q)
{
QNode *p;
for(p=Q->front->next;p!=NULL;p=p->next)
{
printf("%d",p->data);
}
}
int main(void)
{
int i,n;
ElemType e,de;
LinkQueue *q=(LinkQueue *)malloc(sizeof(QNode));
if(!q)
return ERROR;
InitQueue(q);
printf("请输入入队元素的个数:\n");
scanf("%d",&n);
printf("请输入入队的元素:\n");
for(i=0;i<n;++i)
{
scanf("%d",&e);
EnQueue(q,e);
}
printf("队列中的元素为:\n");
Display(q);
printf("出队元素为:\n");
DeQueue(q,&de);
printf("%d",de);
printf("\n");
printf("出队后剩余的序列为:\n");
Display(q);
free(q);
return 0;
}
C语言实现队列(纯C)的更多相关文章
- c语言多线程队列读写
最近用c语言写了个简单的队列服务,记录一下,文件结构为 main.c queue.c queue.h,代码如下: 主函数 #define NUM_THREADS 200 #include <st ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- C语言 复杂队列(链表队列)
//复杂的队列二 --链表队列 #include<stdio.h> #include<stdlib.h> #define datatype int struct queueli ...
- C语言描述队列的实现及操作(链表实现)
// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...
- C语言描述队列的实现及操作(数组实现)
一.静态数组实现 1.队列接口 #include<stdio.h> // 一个队列模块接口 // 命名为myqueue.h #define QUEUE_TYPE int // 定义队列类型 ...
- C语言——循环队列和链队列的基本运算
// 循环队列#include <stdio.h> #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20 ...
- C语言链队列
链队列类似于单链表,为了限制只能从两端操作数据,其结构体内有2个指针分别指向头尾,但队列里的节点用另一种结构体来表示,头尾指针则为指向该结构体的类型.只能通过操作头尾指针来操作队列. typedef ...
- C语言顺序队列
顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...
- 一起talk C栗子吧(第二十二回:C语言实例--队列一)
各位看官们,大家好,上一回中咱们说的是表达式求值的样例,该样例使用了栈,这一回咱们说的是栈的 兄弟:队列. 闲话休提,言归正转.让我们一起talk C栗子吧. 我们在这里说的队列是一种抽象的数据结构, ...
随机推荐
- JavaScript学习与实践一
一.JavaScript数组 创建JavaScript数组有两种方式 方式一: var cars=new Array(); cars[0]="Audi"; cars[1]=&quo ...
- es6 - foreach
foreach ... // es5 - foreach arr.forEach(function(value, index, arr) { console.log(value, index, arr ...
- fabric使用实例(发布web包的一个例子)
#!/usr/bin/env python # -*- coding: utf-8 -* #添加中文注释的编码 #fabfile.py from fabric.api import * env.use ...
- mybatis数据查询返回值
查询: 返回值是整数. 小于0是查询的数据不存在,大于0是查询的数据已经存在. 修改: 返回值是整数. 大于0是修改的数据成功,否则就是失败. 添加: 和修改同理.
- servletResponse 请求重定向
package response;/* * 重定向特点: * 1,浏览器会向服务器发送两次请求,意味着就有两个request\response * 2,用重定向技术,浏览器地址栏会发生变化 * * ...
- python学习(五)列表
#!/usr/bin/python # 列表的学习, 列表的概念不陌生, 就是熟悉一下python中的列表是如何操作的 # 1. 序列的操作 L = [ 123, 'spam', 1.23] # 里面 ...
- CentOS下安装python3.x版本
现在python都到了3.x版本,但是centos中自带的python仍然是2.7版本的,所以想把python换成3.x版本的. 但是这个地方有个坑,你要是直接编译安装了python3.x之后,估计你 ...
- 五分钟了解 Service Mesh
1 背景 1.1 多语言 微服务理念是提倡不同业务使用最适合它的语言开发,现实情况也确实如此,尤其是AI的兴起,一般大型互联网公司存在 C/C++.Java.Golang.PHP.Pyth ...
- XMPP资源绑定(Resource Binding)
一个XMPP的账号由三部分组成: 用户名(user/node),域名(domain)和资源(resource) .例如 alice@xmpp.irusher.com/mobile ,user部分(或n ...
- 深入Asyncio(二)从线程到协程
线程的真相 多线程并不是一无是处,在实际问题中,要权衡优劣势来选择多线程.多进程或是协程.协程为多线程的某些问题提供了一种解决方案,所以学习协程首先要对线程有一定了解. 多线程优点 代码可读性 多线程 ...