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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

是栈还是队列c语言实验报告怎么写,队列和栈(C语言)

發(fā)布時間:2024/9/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 是栈还是队列c语言实验报告怎么写,队列和栈(C语言) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

棧和隊列的基本性質(zhì)

棧是先進(jìn)后出的結(jié)構(gòu)(彈夾)

隊列是先進(jìn)先出的(排隊)

棧和隊列在實現(xiàn)結(jié)構(gòu)上可以有數(shù)組和鏈表兩種方式

棧結(jié)構(gòu)的基本操作:

1、彈棧

2、訪問棧頂元素

3、壓棧操作

4、返回當(dāng)前棧中的元素個數(shù)

隊列結(jié)構(gòu)的基本操作:

1、隊列元素進(jìn)隊列是從隊尾插入的

2、隊列元素出隊列是從對頭彈出的 ? ? ? ? ? ? (類似于日常排隊)

/*棧的結(jié)構(gòu)定義(順序棧)*/

#define MAXSIZE 100

typedef int ElemType; /*視棧中要存放的具體元素類型而定*/

typedef int Status;

typedef struct

{

ElemType data[MAXSIZE]; //利用系統(tǒng)的棧來存放棧元素

int top;

}Stack;

typedef struct

{

ElemType *base; //利用堆來存放棧的元素

ElemType *top; //棧頂指針和棧底指針

int count; //棧的大小

}Stack1;

/*棧的初始化*/

Status InitStack(Stack *s)

{

if(s == NULL)

{

return -1;

}

s->top = -1; //初始化棧頂指針

return 0;

}

#define NUM 10

Status InitStack(Stack1 *s1)

{

if(s1 == NULL)

{

return -1;

}

s1->top = (ElemType *)malloc(sizeof(ElemType)*NUM); //初始化棧頂指針

if(NULL == s1->top)

{

return -1; //申請內(nèi)存失敗

}

s1->base = s1->top;

s1->count = 0;

return 0;

}

/*壓棧*/

Status push(Stack *s, ElemType e)

{

if(s->top == MAXSIZE-1)

{

//棧滿

return -1;

}

s->top++;

s->data[s->top] = e;

return 0;

}

Status push(Stack1 *s1, ElemType e)

{

if(s1->top == s1->base+NUM-1)

{

//棧滿

return -1;

}

*(s1->top) = e;

s1->top++;

s1->count++;

return 0;

}

/*出棧*/

Status pop(Stack *s, ElemType *e)

{

if(s->top == -1)

{

//棧空

return -1;

}

*e = s->data[s->top];

s->top--;

return 0;

}

Status pop(Stack1*s1, ElemType *e)

{

if(s1->top == s1->base)

{

//棧空

return -1;

}

*e = *(s1->top);

s1->top--;

s->count--;

return 0;

}

/*鏈?zhǔn)綏?/

/*棧元素的(節(jié)點的結(jié)構(gòu))和棧結(jié)構(gòu)的定義*/

typedef int ElemType;

typedef int Status;

/*結(jié)點的結(jié)構(gòu)*/

typedef struct node

{

ElemType data;

struct node *next;

}Node;

/*棧的結(jié)構(gòu)*/

typedef struct

{

struct node *top; //棧頂指針

int count; //用來記錄棧元素的個數(shù)

}Stack;

/*鏈棧初始化*/

Status InitStack(Stack *s)

{

if(NULL == s)

{

return -1;

}

s->top = NULL; //棧空,棧頂指針指向NULL

s->count = 0;

return 0;

}

/*把鏈表的頭指針當(dāng)作棧的棧頂指針,鏈表的尾結(jié)點當(dāng)作棧底*/

/*棧元素只在棧頂進(jìn)棧或者出棧*/

/*壓棧*/

Status push(Stack *s, ElemType e)

{

if(NULL == s)

{

return -1;

}

Node *p = (Node *)malloc(sizeof(Node)); //申請一個節(jié)點

if(NULL == p)

{

return -1;

}

p->data = e;

p->next = s->top; //令新創(chuàng)建的節(jié)點指向當(dāng)前的棧頂

s->top = p; //棧頂指針指向新壓棧的元素

s->count++;

return 0;

}

/*出棧*/

Status pop(Stack *s, ElemType *e)

{

if(NULL==s || NULL==s->top)

{

return -1;

}

*e = s->top->data; //取出棧頂元素的值

Node *temp = s->top; //保存當(dāng)前要出棧的棧頂元素的地址

s->top = s->top->next; //將棧頂指針移向下一個元素

s->count--;

free(temp); //釋放當(dāng)前棧頂元素的指針

return 0;

}

/*循環(huán)隊列(順序結(jié)構(gòu))*/

#define MAXSIZE 10 //隊列的大小

typedef int ElemType;

typedef int Status;

/*順序隊列結(jié)構(gòu)*/

typedef struct

{

ElemType data[MAXSIZE]; //利用系統(tǒng)的棧來存放隊列的元素

int front; //隊頭(出隊)

int rear; //隊尾(進(jìn)隊)

}Queue;

/*隊列的初始化*/

Status InitQueue(Queue *q)

{

if(NULL == q)

{

return -1;

}

q->rear = 0;

q->front = 0;

return 1;

}

/*返回循環(huán)隊列的元素個數(shù)*/

int NumQueue(Queue *q)

{

return (q->rear-q->front+MAXSIZE)%MAXSIZE;

}

/*進(jìn)隊列(從隊尾進(jìn)隊)*/

Status EnQueue(Queue *q, ElemType e)

{

if(NULL==q || (q->rear+1)%MAXSIZE==q->front)

{

return -1;

}

q->data[q->rear] = e;

q->rear = (q->rear+1) % MAXSIZE;

return 0;

}

/*出隊列(從隊頭出隊)*/

Status OutQueue(Queue *q, ElemType *e)

{

if(q==NULL || q->rear==q->front)

{

return -1;

}

*e = q->data[q->front];

q->front = (q->front+1) % MAXSIZE;

return 0;

}

/*用鏈表實現(xiàn)隊列*/

/*隊列元素的結(jié)點結(jié)構(gòu)和隊列結(jié)構(gòu)*/

/*隊列存儲的元素的類型*/

typedef int ElemType;

typedef int Status;

/*結(jié)點結(jié)構(gòu)*/

typedef struct node

{

ElemType data;

struct node *next;

}Node;

/*隊列結(jié)構(gòu)(一個隊頭指針,一個隊尾指針)*/

typedef struct

{

struct node *front;

struct node *rear;

}Queue;

/*鏈?zhǔn)疥犃械某跏蓟?/

/*無頭結(jié)點*/

Status InitQueue(Queue *q)

{

if(NULL == q)

{

return -1;

}

q->front = NULL;

q->rear = NULL;

return 0;

}

/*有頭結(jié)點*/

Status InitQueue(Queue *q)

{

if(NULL == q)

{

return -1;

}

/*創(chuàng)建一個頭結(jié)點*/

Node *p = (Node *)malloc(sizeof(Node));

if(NULL == p)

{

return -1;

}

/*初始化頭結(jié)點和隊頭隊尾指針*/

p->next = NULL;

q->front = p;

q->rear = p;

return 0;

}

/*元素進(jìn)隊列*/

Status EnQueue(Queue *q, ElemType e)

{

if(NULLL == q)

{

return -1;

}

Node *temp = (Node *)malloc(sizeof(Node));

if(NULL == temp)

{

//申請內(nèi)存失敗

return -1;

}

/*初始化新插入的節(jié)點*/

temp->next = NULL;

temp->data = e;

/*從隊尾連接新插入的節(jié)點并把隊尾指針指向新插入的節(jié)點*/

q->rear->next = temp;

q->rear = temp;

return 0;

}

/*元素出隊列*/

/*無頭結(jié)點版本,從隊頭出隊*/

Statu OutQueue(Queue *q, ElemType *e)

{

if(NULL == q || (NULL==q->rear))

{

return -1;

}

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

{

/*如果大家都指向同一個節(jié)點證明隊列只有一個元素,那么q->rear也應(yīng)該要改變*/

free(q->front);

q->front = NULL;

q->rear = NULL;

return 0;

}

Node *temp = q->front;

*e = q->front->data;

q->front = q->front->next;

free(temp);

return 0;

}

/*有頭結(jié)點版本*/

Status OutQueue(Queue *q, ElemType *e)

{

if(NULL==q || (q->rear==q->front))

{

return -1;

}

Node *temp = q->front->next;

if(q->front->next == q->rear)

{

q->rear = q->front;

}

q->front->next = temp->next;

*e = temp->data;

free(temp);

return 0;

}

/*計算隊列元素的數(shù)量*/

/*無頭結(jié)點*/

int NumQueue(Queue *q)

{

if(NULL == q)

{

return -1;

}

int count = 1;

Node *temp1 = q->front;

Node *temp2 = q->rear;

if(temp1==NULL && temp2==NULL)

{

return 0;

}

else if(temp1 == temp2)

{

return count;

}

while(temp1 != temp2)

{

count++;

temp1 = temp1->next;;

}

return count;

}

總結(jié)

以上是生活随笔為你收集整理的是栈还是队列c语言实验报告怎么写,队列和栈(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。