棧和佇列之回圈佇列實現基礎操作和效果圖

2020-08-13 10:00:04

前言:

本程式碼用C語言寫的,可以直接複製下來跑效果,有不會的可以留言,會回答解決

棧和佇列都是操作受限的線性表,佇列用隊首元素和隊尾元素來告訴使用者哪個是開始,哪個是結束,這是硬性約束條件,必須遵守,和以前預設第一個就是下標爲0的元素,最後一個就是下標爲lenght-1的元素不一樣,這種想法在這裏最好不要有 

不可以隨便讀取棧或佇列中間的某個數據!

不可以隨便讀取棧或佇列中間的某個數據!

不可以隨便讀取棧或佇列中間的某個數據!

效果圖:

#include <stdio.h>
#include <stdbool.h>

#define MaxSize 150

typedef int ElemType;
typedef struct{
	ElemType data[MaxSize];			//存放佇列元素 
	int front,rear;					//隊頭指針和隊尾指針 
}SqQueue;

/*初始化回圈佇列*/
void QueueInit(SqQueue *sq)
{
	sq->front=0;
	sq->rear=0;
}

/*判斷回圈佇列是否爲空*/
bool QueueEmpty(SqQueue *sq)
{
	if(sq->front==sq->rear)			
		return true;
	else
		return false;
}

/*入隊操作*/
bool QueueIn(SqQueue *sq,ElemType e)
{
	if((sq->rear+1)%MaxSize==sq->front)		//隊滿則報錯 
		return false;
	sq->data[sq->rear]=e;
	sq->rear=(sq->rear+1)%MaxSize;			//隊尾指針加1取模
	return true; 
}

/*出隊操作*/
bool QueueOut(SqQueue *sq,ElemType *e)
{
	if(sq->front==sq->rear)					//對空則報錯 
		return false;
	*e = sq->data[sq->front];
	sq->front = (sq->front+1)%MaxSize;		//隊頭指針加1取模 
	return true;
}

int main(void)
{
	SqQueue SqQ,*sq;
	QueueInit(&SqQ);
	for(int i=0;i<=10;i++)
	{
		QueueIn(&SqQ,i);
		printf("隊首:%d\t數據元素:%d\t隊尾:%d\n",SqQ.front,SqQ.data[i],SqQ.rear);
	}
	printf("\n\n");
	int e;
	QueueOut(&SqQ,&e);
	for(int i=0;i<=10;i++)
	{
		printf("隊首:%d\t數據元素:%d\t隊尾:%d\n",SqQ.front,SqQ.data[i],SqQ.rear);
	}
	return 0;
}