栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构-顺序队列及基本操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构-顺序队列及基本操作

        与栈结构类似,队列也是对数据存取有着严格要求的线性存储结构。与栈不同的是,队列的两端都是可进行操作的,元素只能从队尾进入,队头取出。同时具有“先进先出”的存取特点。

        顺序队列,即用顺序表的方式的进行存储的队列结构。

队列具有以下两个特点:

  1. 数据从队列的一端进,另一端出;
  2. 数据的入队和出队遵循"先进先出"的原则;


因此,只要使用顺序表按以上两个要求操作数据,即可实现顺序队列。

由于顺序队列的底层使用的是数组,因此需预先申请一块足够大的内存空间初始化顺序队列。除此之外,为了满足顺序队列中数据从队尾进,队头出且先进先出的要求,我们还需要定义两个指针(top 和 rear)分别用于指向顺序队列中的队头元素和队尾元素:

由于顺序队列初始状态没有存储任何元素,因此 top 指针和 rear 指针重合,且由于顺序队列底层实现靠的是数组,因此 top 和 rear 实际上是两个变量,它的值分别是队头元素和队尾元素所在数组位置的下标。

当有数据元素进队列时,对应的实现操作是将其存储在指针 rear 指向的数组位置,然后 rear+1;当需要队头元素出队时,仅需做 top+1 操作。

入队:

 

……

 

 代码:
 

int enQueue(int *a,int rear,int data){
	a[rear]=data;
	rear++;
	return rear;
}
出队:

……

 

 代码:

void deQueue(int *a,int front,int rear){
	while(front!=rear){
		printf("出队元素:%dn",a[front]);
		front++;
	}
}

完整代码:
 

#include
int enQueue(int *a,int rear,int data){
	a[rear]=data;
	rear++;
	return rear;
}

void deQueue(int *a,int front,int rear){
	while(front!=rear){
		printf("出队元素:%dn",a[front]);
		front++;
	}
}
 
int main() {
    int a[100];
    int front,rear;
    //设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
    front=rear=0;
    //入队
    rear=enQueue(a, rear, 1);
    rear=enQueue(a, rear, 2);
    rear=enQueue(a, rear, 3);
    rear=enQueue(a, rear, 4);
    //出队
    deQueue(a, front, rear);
    return 0;
}

输出:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号