1. 程式人生 > 其它 >重學資料結構:佇列的順序實現的各種操作(C語言)

重學資料結構:佇列的順序實現的各種操作(C語言)

技術標籤:資料結構佇列資料結構c語言

文章目錄

佇列的順序實現定義

佇列的定義和順序表、順序棧其實差不多,只不過有兩個變數來記錄佇列頭,尾,操作不盡相同,佇列只能在尾部插入,頭部退列

typedef struct 
{
    int data[MaxSize];
	int front,rear; //隊頭隊尾
}SqQueue;

佇列初始化

void InitSqQueue(SqQueue *Q)
{
    Q->front=0;
	Q->rear=0;
}

判斷隊滿

bool IsQueueFull
(SqQueue Q) { if((Q.rear+1)%MaxSize==Q.front) return true; else return false; }

判斷隊空

bool IsQueueEmpty(SqQueue Q)
{
   if(Q.front==Q.rear)
	   return true;
   else
	   return false;
}

建立佇列

bool CreateSqQueue(SqQueue *Q)
{
    int data;
	printf("請輸入整數:");
	scanf("%d",&
data); Q->front=9; //從中間開始佇列 Q->rear=9; int i=Q->front; while(data!=9999&&!IsQueueFull(*Q)) { Q->data[i]=data; Q->rear=(Q->rear+1)%MaxSize; i=(i+1)%MaxSize; printf("請輸入整數:"); scanf("%d",&data); } return true; }

列印佇列


void PrintSqQueue
(SqQueue Q) { int startid=Q.front; int endid=Q.rear; while(startid!=endid) { printf("Q.data[%d]=%d\n",startid,Q.data[startid]); startid=(startid+1)%MaxSize; } }

入隊

bool EnQueue(SqQueue *Q,int e)
{
   if(IsQueueFull(*Q))return false;
   Q->data[Q->rear]=e;
   Q->rear=(Q->rear+1)%MaxSize;
   return true;
}

退隊

int DeQueue(SqQueue *Q)
{
   if(IsQueueEmpty(*Q))return false;
   int e=Q->data[Q->front];
   Q->front=(Q->front+1)%MaxSize;
   return e;
}

測試程式碼

int main(int argc, char* argv[])
{
    SqQueue Q;
	InitSqQueue(&Q);
    CreateSqQueue(&Q);
	PrintSqQueue(Q);

	printf("EnQueue(&Q,999)\n");
	EnQueue(&Q,999);
    PrintSqQueue(Q);

    
	int e=DeQueue(&Q);
	printf("DeQueue(&Q)=%d\n",e);

    PrintSqQueue(Q);

   //printf("11求餘10=%d",11%10);
}

測試結果

請輸入整數:11
請輸入整數:22
請輸入整數:33
請輸入整數:44
請輸入整數:55
請輸入整數:66
請輸入整數:9999
Q.data[9]=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
EnQueue(&Q,999)
Q.data[9]=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
Q.data[5]=999
DeQueue(&Q)=11
Q.data[0]=22
Q.data[1]=33
Q.data[2]=44
Q.data[3]=55
Q.data[4]=66
Q.data[5]=999
Press any key to continue