鏈棧和鏈隊列的建立及基本操作 -开发者知识库

鏈棧和鏈隊列的建立及基本操作 -开发者知识库,第1张

鏈棧:c 版

 1 #include<iostream>
 2 #include<stdlib.h>
 3 using namespace std;  4 struct Node{  5     int value; //定義棧中的數據類型為 int 型
 6     Node *next;  7 };  8 Node * build_stack(){ //建立空的鏈棧的函數
 9     Node *p=(Node*)malloc(sizeof(Node)); 10     p->next=NULL; 11     return p; 12 } 13 bool stack_empty(Node *a){ //判斷棧是否為空的函數
14     if((a->next)==NULL) return true; //如果下一個地址為空,那么說明棧為空
15     return false; 16 } 17 int stack_size(Node *a){   //獲取棧的大小的函數
18     Node *p=a->next; 19     int length_size=0; 20     while(p!=NULL){ 21         length_size  ; 22         p=p->next; 23  } 24     return length_size; 25 } 26 bool push_stack(Node *a,int value){  //將值為value的元素壓入棧
27     Node *p=(Node *)malloc(sizeof(Node)); 28     if(p==NULL) return false; 29     p->value=value; 30     p->next=a->next; 31     a->next=p; 32     return true; 33 } 34 void pop_stack(Node *a){   //刪除棧頂元素
35     Node *p,*q; 36     p=a->next; 37     q=a->next->next; 38     free(p); //釋放棧頂元素空間
39     a->next=q; //頭指針指向棧頂元素
40 } 41 int get_top(Node *a){ //獲取棧頂元素
42     if(a->next==NULL) return -1; 43     int value=a->next->value; 44     return value; 45 } 46 int main(){ 47     Node *a; 48     a=build_stack();  //調用建棧函數
49     if(a==NULL){ 50         cout<<"建棧失敗!"<<endl; 51         return 0; 52  } 53     cout<<"建棧成功! "<<endl; 54     cout<<"第一行輸入一個n,下一行輸入你要壓入的n個元素 "<<endl; 55     int n; 56     cin>>n;  //輸入n,表示n個元素
57     while(n--){ 58         int value; 59         cin>>value; 60         push_stack(a,value);  //將輸入的元素壓入棧
61  } 62     if(!stack_empty(a)){ 63         cout<<"棧的大小為: "<<stack_size(a)<<endl; 64     }else{ 65         cout<<"棧為空"<<endl; 66  } 67     if(!stack_empty(a)) 68  pop_stack(a); 69     if(!stack_empty(a)) 70         cout<<"刪除一個元素后,棧頂元素為:"<<get_top(a)<<endl; 71     int SIZE=stack_size(a); 72     cout<<"當前棧的大小為: "<<SIZE<<endl; 73     cout<<"將當前棧中的元素全部彈出:"<<endl; 74     while(!stack_empty(a)){ 75         cout<<get_top(a)<<endl; 76  pop_stack(a); 77  } 78     return 0; 79 }

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复