前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言队列的基本操作

C语言队列的基本操作

作者头像
earthchen
发布2020-09-24 11:09:13
7370
发布2020-09-24 11:09:13
举报
文章被收录于专栏:earthchen的专栏earthchen的专栏

本篇介绍一下编程中比较重要的一个数据结构队列,队列有个很显著的标志,对其中的数据是先进先出,如果是顺序存储结构可以说就是一个受限的数组,对链式存储结构就只能说是符合先进先出的规则了,这种数据结构在我们真正的编程中还是相当常用的。实际中根据需要去定制自己的队列。

开始

顺序队列的操作

首先我们来介绍一下顺序存储结构下的队列的定义和基本操作

添加适当的头文件,定义一个顺序存储数据结构,

这里需要添加头文件和定义一个队列的顺序数据结构

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct
{
	ElemType *base;
	int front;
	int rear;
}SqQueue;
初始化一个队列(创建一个队列)
代码语言:javascript
复制

Status InitQueue(SqQueue *q) {
	q->base = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));
	if (!q->base)
	{
		exit(0);
	}
	q->front = q->rear = 0;
	return OK;
}
入队操作
代码语言:javascript
复制
Status InsertQueue(SqQueue *q, ElemType e) {
	if ((q->rear + 1) % MAXSIZE == q->front)
	{
		return ERROR;
	}
	q->base[q->rear] = e;
	q->rear = (q->rear + 1) % MAXSIZE;
	return OK;
}
出队操作
代码语言:javascript
复制
Status DeleteQueue(SqQueue *q, ElemType *e) {
	if (q->front == q->rear)
	{
		return ERROR;
	}
	*e = q->base[q->front];
	q->front = (q->front + 1) % MAXSIZE;
	return OK;
}
主函数
代码语言:javascript
复制
void main() {
	SqQueue q;
	int a[10];
	int i;
	InitQueue(&q);
	for (i = 0; i < 10; i++)
	{
		InsertQueue(&q, i + 1);
	}
	for (i = 0; i < 10; i++)
	{
		DeleteQueue(&q, &a[i]);
		printf("%d\n", a[i]);
	}
}

都是很基本的操作,在顺序队列中,可以从数组的方式去理解,这样将会让你理解起来更简单

链式队列的操作

首先我们来介绍一下顺序存储结构下的队列的定义和基本操作

添加适当的头文件,定义一个队列链式存储数据结构,

这里需要添加头文件和定义一个队列的链式存储数据结构

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
typedef struct QNode
{
	ElemType data;
	struct QNode *next;
}QNode, *QueuePrt;
typedef struct
{
	//对头,尾指针
	QueuePrt front, rear;
}LinkQueue;
初始化一个队列(创建一个队列)
代码语言:javascript
复制
Status InitQueue(LinkQueue *q) {
	q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));
	if (!q->front)
	{
		exit(0);
	}
	q->front->next = NULL;
	return OK;
}
入队操作
代码语言:javascript
复制
Status InsertQueue(LinkQueue *q, ElemType e) {
	QueuePrt p = (QueuePrt)malloc(sizeof(QNode));
	if (!p)
	{
		exit(0);
	}
	p->data = e;
	p->next = NULL;
	q->rear->next = p;
	q->rear = p;
	return OK;
}
出队操作
代码语言:javascript
复制
Status DeleteQueue(LinkQueue *q, ElemType *e) {
	QueuePrt p;
	if (q->front == q->rear)
	{
		return ERROR;
	}
	p = q->front->next;
	*e = p->data;
	q->front->next = p->next;
	if (q->rear == p)
	{
		q->rear = q->front;
	}
	free(p);
	return OK;
}
主函数
代码语言:javascript
复制
void main() {
	LinkQueue q;
	int a[10];
	int i;
	InitQueue(&q);
	for (i = 0; i < 10; i++)
	{
		InsertQueue(&q, i + 1);
	}
	for (i = 0; i < 10; i++)
	{
		DeleteQueue(&q, &a[i]);
		printf("%d\n", a[i]);
	}
}
在链式存储结构中的队列同样还是相对很简单的,只要理解了先进先出的逻辑,和了解一下指针操作就可以很容易的写出队列的节本操作。

注:

  • 上述代码在visual studio 2015中编译成功运行,其他ide请自行测试
  • 上述文字皆为个人看法,如有错误或建议请及时联系我
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-16,,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始
    • 顺序队列的操作
      • 添加适当的头文件,定义一个顺序存储数据结构,
      • 初始化一个队列(创建一个队列)
      • 入队操作
      • 出队操作
      • 主函数
    • 链式队列的操作
      • 添加适当的头文件,定义一个队列链式存储数据结构,
      • 初始化一个队列(创建一个队列)
      • 入队操作
      • 出队操作
      • 主函数
      • 在链式存储结构中的队列同样还是相对很简单的,只要理解了先进先出的逻辑,和了解一下指针操作就可以很容易的写出队列的节本操作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档