棧的基本操作(連結串列)
阿新 • • 發佈:2021-06-10
棧的連結串列的操作和線性表的鏈式儲存結構差不多。
我們用圖來形象表達一下
線性表的順序儲存結構:
鏈棧:
鏈棧的基本操作有棧的初始化、插入資料、刪除資料、遍歷棧
對應的程式碼為:
//棧的初始化 int InitStack(Stack *stack){ stack->top=stack->bottom=NULL; stack->stack_size=SIZE; return OK; } //插入資料 int Push(Stack *stack){ int data; Node *newNode=(Node *)malloc(sizeof(Node)); newNode->next=stack->top; stack->top=newNode; printf("請輸入要插入的元素的值:"); scanf("%d",&data); stack->top->data=data; return OK; } //刪除資料 int Pop(Stack *stack){ Node *p; printf("%d",stack->top->data); p=stack->top->next; free(stack->top); stack->top=p; return OK; } //遍歷棧 int print(Stack *stack){ while(stack->top!=NULL){ printf("%d",stack->top->data); stack->top=stack->top->next; } return OK; }
這裡的結構體要定義兩個,一個用來建立棧,一個用來建立結點。對應的程式碼為:
//建立結點 typedef struct Node{ int data; struct Node *next; }Node;//建立棧 typedef struct Stack{ Node *top; Node *bottom; int stack_size; }Stack;
完整程式碼為:
1 #define OK 1 2 #define ERROR 0 3 #define SIZE 100 4 typedef struct Node{ 5 int data; 6 struct Node *next; 7 }Node; 8 typedef struct Stack{ 9 Node *top; 10 Node *bottom; 11 int stack_size; 12 }Stack; 13 //棧的初始化 14 int InitStack(Stack *stack){ 15 stack->top=stack->bottom=NULL; 16 stack->stack_size=SIZE; 17 return OK; 18 } 19 //插入資料 20 int Push(Stack *stack){ 21 int data; 22 Node *newNode=(Node *)malloc(sizeof(Node)); 23 newNode->next=stack->top; 24 stack->top=newNode; 25 printf("請輸入要插入的元素的值:"); 26 scanf("%d",&data); 27 stack->top->data=data; 28 return OK; 29 } 30 //刪除資料 31 int Pop(Stack *stack){ 32 Node *p; 33 printf("%d",stack->top->data); 34 p=stack->top->next; 35 free(stack->top); 36 stack->top=p; 37 return OK; 38 } 39 //遍歷棧 40 int print(Stack *stack){ 41 while(stack->top!=NULL){ 42 printf("%d",stack->top->data); 43 stack->top=stack->top->next; 44 } 45 return OK; 46 } 47 int main() 48 { 49 Stack a; 50 InitStack(&a); 51 Push(&a); 52 Push(&a); 53 printf("刪除的元素是:"); 54 Pop(&a); 55 printf("剩餘的元素為:"); 56 print(&a); 57 return 0; 58 }
執行結果為: