顺序队列的存储表示

1.队列的顺序存储结构

#define QElemType int
#define Queue_Size 100
typedef struct {
	QElemType data[Queue_Size];
	int front, rear;
}SeqQueue;

2.队列的基本操作

/// <summary>
/// initialize the queue, make it a empty queue
/// </summary>
/// <param name="Q">is a queue</param>
void InitQueue(SeqQueue* Q)
{
	Q->front = Q->rear = 0;
}

/// <summary>
/// judge if the queue is empty or not
/// </summary>
/// <param name="Q">1 is empty, and 0 is not.</param>
/// <returns></returns>
int IsEmpty(SeqQueue* Q)
{
	return (Q->front == Q->rear) ? 1 : 0;
}
/// <summary>
/// judge if the queue is full or not
/// </summary>
/// <param name="Q">is a queue</param>
/// <returns>1 is full, and 0 is not</returns>
int IsFull(SeqQueue* Q)
{
	/*int i, j;
	i = (Q->rear + 1) % Queue_Size;
	j = Q->front;
	if (i == j)return 1;
	else return 0;*/
	return ((Q->rear + 1) % Queue_Size == Q->front) ? 1 : 0;
}
/// <summary>
/// put data into queue
/// </summary>
/// <param name="Q">is a queue</param>
/// <param name="e">is the data you want to put in</param>
/// <returns>1 is success, and 0 is fail</returns>
int EnterQueue(SeqQueue* Q, QElemType e)
{
	if (IsFull(Q))return 0;
	else {
		Q->data[Q->rear] = e;
		Q->rear = (Q->rear + 1) % Queue_Size;
		return 1;
	}
}
/// <summary>
/// delete data from queue
/// </summary>
/// <param name="Q">is a queue</param>
/// <param name="e">is the data you had delete</param>
/// <returns>1 is success, and 0 is fail</returns>
int DeleteQueue(SeqQueue* Q, QElemType* e)
{
	if (IsEmpty(Q))return 0;
	else {
		*e = Q->data[Q->front];
		Q->front = (Q->front + 1) % Queue_Size;
		return 1;

	}
}
/// <summary>
/// get the head-data of queue
/// </summary>
/// <param name="Q">is a queue</param>
/// <param name="e">is the data you had get from queue</param>
/// <returns>1 is success, and 0 is fail</returns>
int GetHead(SeqQueue* Q, QElemType* e)
{
	if (IsEmpty(Q))return 0;
	else {
		*e = Q->data[Q->front];
		return 1;
	}
}
/// <summary>
/// make the queue empty
/// </summary>
/// <param name="Q">is a queue</param>
void ClearQueue(SeqQueue* Q)
{
	Q->front = Q->rear = 0;
}

3.主程序及验证

通过杨辉三角的打印来验证程序

#include<stdio.h>

void InitQueue(SeqQueue* Q);
int IsEmpty(SeqQueue* Q);
int IsFull(SeqQueue* Q);
int EnterQueue(SeqQueue* Q, QElemType e);
int DeleteQueue(SeqQueue* Q, QElemType* e);
int GetHead(SeqQueue* Q, QElemType* e);
void ClearQueue(SeqQueue* Q);

void YHTriangle(SeqQueue*Q,int n);

int main(void)
{
	SeqQueue q, * ptrq = &q;
	InitQueue(ptrq);
	IsEmpty(ptrq);
	IsFull(ptrq);
	int i, temp;
	for (i = 1; i <= 5; i++) {
		EnterQueue(ptrq, i);
		GetHead(ptrq, &temp);
		printf("%d had entered\n",temp);
		DeleteQueue(ptrq, &temp);
	}
	ClearQueue(ptrq);
	YHTriangle(ptrq, 5);
	return 0;
}
/// <summary>
/// make a YHTriangle with a empty queue
/// </summary>
/// <param name="Q">is a empty queue</param>
/// <param name="n">is the number of lines</param>
void YHTriangle(SeqQueue* Q, int n)
{
	if (!IsEmpty(Q))return;
	else if (n == 1)printf("1\n");
	else if (n == 2)printf("1   1\n");
	else {
		EnterQueue(Q, 1);
		EnterQueue(Q, 1);
		printf("1\n1  1\n");
		int i, pre, k;
		for (i = 2; i < n ; i++) {
			DeleteQueue(Q, &pre);
			EnterQueue(Q, pre);
			printf("%d  ", pre);
			do {
				DeleteQueue(Q, &k);
				EnterQueue(Q, pre + k);
				printf("%d  ", pre + k);
				pre = k;
			} while (k != 1);
			EnterQueue(Q, k);
			printf("%d\n", k);
		}
	}
}

4.运行结果截图(Visual Studio 2022)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值