棧陣列與棧連結串列程式碼實現
阿新 • • 發佈:2020-09-11
棧陣列
#include<stdio.h> #include<stdlib.h> #include<string.h> #define maxn 10000 //結點設計 typedef struct stack{ int data[maxn]; int top; }stack; //建立 stack *init(){ stack *s=(stack *)malloc(sizeof(stack)); if(s==NULL){ printf("分配記憶體空間失敗"); exit(0); } memset(s->data,0,sizeof(s->data)); //memset操作來自於庫檔案string.h,其表示將整個空間進行初始化 //不理解可以查閱百度百科https://baike.baidu.com/item/memset/4747579?fr=aladdin s->top=0; //棧的top和bottom均為0(表示為空) return s; } //入棧push void push(stack *s,int data){ s->data[s->top]=data; s->top++; } //出棧pop void pop(stack *s){if(s->top!=0){ s->data[s->top]=0; //讓其迴歸0模擬表示未初始化即可 s->top--; } } //模擬列印棧中元素 void print_stack(stack *s){ for(int n=s->top-1;n>=0;n--){ printf("%d\t",s->data[n]); } printf("\n"); //習慣性換行 } int main(){ stack *s=init(); int input[5]={11,22,33,44,55}; //模擬五個輸入資料 for(int i=0;i<5;i++){ push(s,input[i]); } print_stack(s); ///////////// pop(s); print_stack(s); return 0; }
棧連結串列:
#include <stdio.h> #include <stdlib.h> //棧的結點設計 //單個結點設計,資料和下一個指標 typedef struct node { int data; struct node *next; } Node; //利用上面的結點建立棧,分為指向頭結點的top指標和計數用的count typedef struct stack { Node *top; int count; } Link_Stack; //建立棧 Link_Stack *Creat_stack() { Link_Stack *p; //p = new Link_Stack; p=(Link_Stack*)malloc(sizeof(Link_Stack)); if(p==NULL){ printf("建立失敗,即將退出程式"); exit(0); } p->count = 0; p->top = NULL; return p; } //入棧 push Link_Stack *Push_stack(Link_Stack *p, int elem) { if (p == NULL) return NULL; Node *temp; temp=(Node*)malloc(sizeof(Node)); //temp = new Node; temp->data = elem; temp->next = p->top; p->top = temp; p->count++; return p; } //出棧 pop Link_Stack *Pop_stack(Link_Stack *p) { Node *temp; temp = p->top; if (p->top == NULL) { printf("錯誤:棧為空"); return p; } else { p->top = p->top->next; free(temp); //delete temp; p->count--; return p; } } //遍歷棧:輸出棧中所有元素 int show_stack(Link_Stack *p) { Node *temp; temp = p->top; if (p->top == NULL) { printf(""); printf("錯誤:棧為空"); return 0; } while (temp != NULL) { printf("%d\t", temp->data); temp = temp->next; } printf("\n"); return 0; } int main() { //用主函式測試一下功能 Link_Stack *p; p = Creat_stack(); int n = 5; int input[6] = {10,20,30,40,50,60}; /////////////以依次入棧的方式建立整個棧////////////// for(int i=0;i<n;i++){ Push_stack(p, input[i]); } show_stack(p); ////////////////////出棧/////////////////////// Pop_stack(p); show_stack(p); return 0; }