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

c语言队列的顺序存储实现

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

c语言队列的顺序存储实现

#include 
#include 
#include 

//队列的顺序存储实现 
typedef int Position;
struct QNode {
	int *Data;
	Position Front,Rear;//定义队列的头部以及尾部 
	int MaxSize;//数组的大小 
};
typedef struct QNode *Queue;

Queue CreateQueue(int MaxSize) {
	Queue Q = (Queue)malloc(sizeof(struct QNode));//为该队列分配一块内存空间 
	Q->Data = (int *)malloc(MaxSize * sizeof(int));//为数组分配一块内存空间 
	Q->Front = Q->Rear = 0;
	Q->MaxSize = MaxSize; 
	return Q;
}

bool IsFull(Queue Q) {
	 
	return ((Q->Rear + 1) % Q->MaxSize == Q->Front); 
}
bool AddQ(Queue Q, int x) {
	if (IsFull(Q)) {
		printf("队列满");
		return false;		 
	} else {
		Q->Rear = (Q->Rear + 1) % Q->MaxSize;
		Q->Data[Q->Rear] = x;
		return true;
	}
}

bool IsEmpty(Queue Q) {
	return (Q->Front == Q->Rear);
}

int DeleteQ(Queue Q) {
	if (IsEmpty(Q)) {
		printf("队列空");
//		return ERROR; 
	} else {
		Q->Front = (Q->Front+1) % Q->MaxSize;
		return Q->Data[Q->Front];
	}	
} 

//定义一个显示队列的方法
void showQueue(Queue Q){
	//判断是否为空
	if(IsEmpty(Q)) {
		printf("队列为空,不能显示数据");
		return; 
	}
	//遍历数组,显示数据
	
	for (int i = Q->Front + 1; i <= Q->Front + ((Q->Rear+Q->MaxSize-Q->Front) % Q->MaxSize); i++) {
		printf("Q->Data[%d] = %dn",i%Q->MaxSize,Q->Data[i%Q->MaxSize]);//取模运算的奇妙之处 
	}
} 
int main(void) {
	
	Queue Q = CreateQueue(5);
	printf("直接显示数据Test:因为预留了一个位置,队列只能增加4个元素(队里数组大小为5):n"); 
	AddQ(Q,1);
	AddQ(Q,2);
	AddQ(Q,3);
	AddQ(Q,4);
	showQueue(Q);
	 
	printf("队列满Test:n"); 
	AddQ(Q,5);
	
	printf("n元素出队列Test:n"); 
	printf("出队列值:%dn",DeleteQ(Q));
	printf("出队列值:%dn",DeleteQ(Q));
	printf("出队列值:%dn",DeleteQ(Q));
	printf("出队列值:%dn",DeleteQ(Q));
	printf("n空队列显示Test:n");
	DeleteQ(Q); 
	return 0;
}

输出:

直接显示数据Test:因为预留了一个位置,队列只能增加4个元素(队里数组大小为5):
Q->Data[1] = 1
Q->Data[2] = 2
Q->Data[3] = 3
Q->Data[4] = 4
队列满Test:
队列满
元素出队列Test:
出队列值:1
出队列值:2
出队列值:3
出队列值:4

空队列显示Test:
队列空
--------------------------------
Process exited after 0.06129 seconds with return value 0
请按任意键继续. . .
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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