数据结构概述<4>队列

队列也是一种比较常用的数据结构,和栈不同的地方在于它是先进先出的,就像我们平时的排队一样。

由于队列和栈非常相似,就不详细讲述概念了,可以参考上一篇博客数据结构概述<3>栈

和栈一样,在这里直接给出队列的接口(queue.h),以及接口的数组实现(queue1.c)和链表实现(queue2.c)。分别如下:

//queue.h
void queue_init(int);
int queue_empty();
void queue_put(int);
int queue_get();
//queue1.c

#include <stdlib.h>
#include <stdio.h>

static int *q;
static int N,head,tail;

void queue_init(int maxN)
{
	q = malloc((maxN + 1) * sizeof(int));
	N = maxN + 1;
	head = N;
	tail = 0;
}
int queue_empty()
{
	return head % N == tail;
}
void queue_put(int item)
{
	if (tail == head % N) {
		printf("error:overflow\n");
	}
	q[tail++] = item;
	tail = tail % N;
}
int queue_get()
{
	head = head % N;
	return q[head++];
}
//queue2.c
#include <stdlib.h>

typedef struct queuenode* link;
struct queuenode {
	int item;
	link next;
};
static link head,tail;

link NEW(int item,link next)
{
	link x = malloc(sizeof *x);
	x->item = item;
	x->next = next;
	return x;
}
void queue_init(int maxN)
{
	head = NULL;
}
int queue_empty()
{
	return head == NULL;
}
void queue_put(int item)
{
	if (head == NULL) {
		head = (tail = NEW(item,head));
		return;
	}
	tail->next = NEW(item,tail->next);
	tail = tail->next;
}
int queue_get()
{
	int item = head->item;
	link t = head->next;
	free(head);
	head = t;
	return item;
}
时间: 2024-10-10 01:07:04

数据结构概述<4>队列的相关文章

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

数据结构-概述(1)

数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率. 数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关. 通常有下列四类基本的结构: ⑴集合结构.该结构的数据元素间的关系是"属于同一个集合". ⑵线性结构.该结构的数据元素之间存在着一对一的关系. ⑶树型结构.该结构的数据元素之间存在着一对多的关系

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的

JavaScript数据结构和算法----队列

前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. 一.创建队列 1.创建一种数据结构来保存队列里面的数据,这里选择数组 2.声明一些栈的方法 enqueue(element(s)) : 添加一个或一些元素到队列的末尾 dequeue() : 移除队列第一个的元素(就是排队在最前面的),同时返回被移除的元素. front() : 返回队列第一个的元

算法系列(六)数据结构之表队列和栈

在http://blog.csdn.net/robertcpp/article/details/51559333一文中,我们讲了排序,这一章来介绍一下基本数据结构:表.队列.栈和它们的简单实现 一.表ADT 1.数组实现顺序表 通过对数组操作,来直接对表进行增删查改操作,这种线性表查找某个位置的元素花费的时间为O(1),但是插入删除元素花费的时间为O(n),如果对表的操作更多的是访问操作,那么选择这种实现更为合适. 下面是一个简单实现 package com.algorithm.list; im

[考研系列之数据结构]数据结构概述

1.脑图 2.数据结构 2.1 抽象数据类型 表示法: (D,S,P) D:数据对象 S:D上的关系集 P:对D的基本操作集 ADT格式 ADT 抽象数据类型名{ 数据对象:<数据对象定义> 数据关系:<数据对象的定义> 基本操作:<基本操作的定义> }ADT 抽象数据类型名 基本操作的格式: 基本操作名(参数表) 初始条件:<初始条件描述> 操作结构:<操作结果描述> 2.2 分类 2.2.1 按值的不同特性 原子类型的值是不能分解的,如C中基

数据结构实验之队列一:排队买饭

数据结构实验之队列一:排队买饭 题目描写叙述 中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是非常聪明的,直接奔政通超市,哈哈,确实,政通超市里面也卖饭,有好几种菜,做的比食堂好吃多了,价格也不比食堂贵,而且买菜就送豆浆,吸引了不少童鞋.所以有时吧,人还是非常多的,排队是免不了的,悲剧的是超市仅仅有两个收银窗体. 问题是这种:開始有两队人在排队,如今咱们仅仅研究第一队.如今我们给每一个人一个编号,保证编号各不同样,排在前面的人买完饭就走了,有些人挑完饭就排在后面等待付款.还有一些

数据结构——概述

本来大一下册的时候学过<数据结构>,只怪自己太无知,除了能够理解基本概念外其他的一无所知,上课也算是在坐飞机吧.无奈,现在大二又来看看,复习复习.不求深入的理解只求把书读薄吧. 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的科学. 基本概念和术语: 数据:是信息的载体,是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 数据元素

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是