日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...

發布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前,處在學習數據結構+ing,由于之前學過了隊列,今天就把自己寫過的代碼做了一些完善分享給大家,希望能夠幫助到有需要的朋友,有不足的地方歡迎大家交流? ??φ(゜▽゜*)?

隊列是另一種限定性的線性表,它只允許在表的一端插入元素,而在另一端刪除元素,所以隊列具有先進先出的特性。

一、系統用到的抽象數據類型定義:

ADT Queue{

數據元素:可以是任意類型的數據,但必須屬于同一個數據對象。

數據關系:隊列中數據元素之間是線性關系。

基本操作:

initQueue(&Q);? ? ? ? ? ? ?//循環隊列初始化

enterQueue(&Q);? ? ? ? ? ? //循環隊列入隊操作

deleteQueue(&Q);????????? //循環隊列出隊操作

isEmpty(&Q);? ? ? ? ? ? ? ? ? //判斷隊列是否為空

getHead(&Q,&x);? ? ? ? ? ? //讀取隊列的隊頭元素 ,指針x指向隊頭元素

}ADT Queue;

二、系統中子程序及功能要求:

1.void initQueue(SeqQueue *Q);

操作前提:Q為未初始化的隊列。

操作結果:將Q初始化為一個空隊列。

2.int enterQueue(SeqQueue *Q,int n);

操作前提:隊列Q已存在。

操作結果:在隊列Q的隊尾插入n。操作成功,返回值為True,否則返回值為False。

3.void deleteQueue(SeqQueue *Q);

操作前提:隊列Q已存在。

操作結果:將隊列Q的隊頭元素出隊。操作成功,返回值為True,否則返回值為

False。

4.int isEmpty(SeqQueue *Q);

操作前提:隊列Q已存在。

操作結果:若隊列為空,則返回True,否則返回False。

5.int getHead(SeqQueue *Q,int *x);

操作前提:隊列Q已存在。

操作結果:取隊列Q的隊頭元素(該元素不出隊),并用x帶回其值。操作成功,

返回值為True,否則返回值為False。

三、代碼實現

/*順序表實現循環隊列的基本操作 (損失一個數組空間)*/

#include#include#define Queue_Size 50 //隊列的最大長度

#define True 1

#define False 0

typedef struct

{

int elem[Queue_Size]; //隊列的元素空間

int front; //頭指針指示器

int rear; //尾指針指示器

}SeqQueue;

void initQueue(SeqQueue *Q); //循環隊列初始化

int enterQueue(SeqQueue *Q,int n); //循環隊列入隊操作

void deleteQueue(SeqQueue *Q); //循環隊列出隊操作

int isEmpty(SeqQueue *Q); //判斷隊列是否為空

int getHead(SeqQueue *Q,int *x); //讀取隊列的隊頭元素 ,指針x指向隊頭元素

int main()

{

SeqQueue Q;

int choice,x;

while(true) //循環隊列操作選擇菜單

{

printf("*****************Please enter your choice*****************\n\n");

printf(" choice 1:Queue initialization\n");

printf(" choice 2:Into the queue\n");

printf(" choice 3:Out of the queue\n");

printf(" choice 4:Determine whether the queue is empty\n");

printf(" choice 5:Get queue head\n");

printf(" choice 0:exit\n\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

initQueue(&Q);

break;

case 2:

int n;

printf("Please enter the number into the queue elements:");

scanf("%d",&n); //讀入存入的隊列元素個數

//三目運算符根據返回值判斷元素是否進隊成功

(enterQueue(&Q,n)==1)?printf("%d個元素依次進隊成功\n",n):printf("%d個元素依次進隊失敗\n",n);

break;

case 3:

deleteQueue(&Q);

break;

case 4: //三目運算符根據返回值判斷隊列是否為空

(isEmpty(&Q)==1)?printf("An empty Queue\n"):printf("Not an empty Queue\n");

break;

case 5: //三目運算符根據返回值判斷隊頭元素是否讀取成功

(getHead(&Q,&x)==False)?printf("An empty Queue error!!!!\n"):printf("Get head successful,隊頭元素為:%d\n",x);

break;

case 0:

exit(0);

break;

default:

printf("ERROR!!\n");

exit(0);

break;

}

}

return 0;

}

void initQueue(SeqQueue *Q)

{ //將 *Q 初始化為一個空的循環隊列

Q->front=Q->rear=0;

}

int enterQueue(SeqQueue *Q,int n)

{ //將元素n入隊

int n1,n2;

printf("Please enter into the queue elements in turn:\n");

for(n1=0;n1rear+1)%Queue_Size==Q->front) return False; //尾指針加1追上頭指針,標志隊列已經滿了

scanf("%d",&n2);

Q->elem[Q->rear]=n2; //元素進隊

Q->rear=(Q->rear+1)%Queue_Size; //重新設置隊尾指針

}

return True; //操作成功

}

void deleteQueue(SeqQueue *Q)

{ //刪除隊列的隊頭元素

int a;

if(Q->front==Q->rear)

{ //隊列為空,刪除失敗

printf("An empty Queue error!!!!\n");

}

else

{

a=Q->elem[Q->front]; //刪除前先讀取隊頭元素

Q->front=(Q->front+1)%Queue_Size; //重新設置隊頭指針

printf("隊頂元素%d出隊成功.\n",a); //操作成功

}

}

int isEmpty(SeqQueue *Q)

{

if(Q->front==Q->rear)

{ //判斷隊列為空,返回True

return True;

}

return False; //否則返回False

}

int getHead(SeqQueue *Q,int *x)

{

if(Q->front==Q->rear)

{ //隊列為空,讀取失敗

return False;

}

else

{

*x=Q->elem[Q->front]; //操作成功

return True;

}

}

總結

以上是生活随笔為你收集整理的C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。