前言:
本程式碼用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;
}