9.考研-資料結構-鏈棧的基本操作(帶頭結點)
阿新 • • 發佈:2019-01-23
// ConsoleApplication1.cpp : 定義控制檯應用程式的入口點。 // /* 鏈棧: 兩個特殊狀態: 1.棧空的狀態:lst.next=NULL 2.棧滿的狀態 可以認為無限大 兩個操作: 1.入棧:(頭插法建立連結串列插入操作) p->next=lst->next; lst->next=p; 2.出棧(就是單鏈表的刪除操作) p=lst->next; x=p->data; lst->next=p->next; free(p); */ #include "stdafx.h" #include<iostream> using namespace std; //鏈棧的結點定義 typedef struct Lnode{ int data; struct Lnode *next; }Lnode,*Stack; //1.初始化一個鏈棧 void initStack(Stack stack) {//stack會改變,用引用型 stack = (Lnode*)malloc(sizeof(Lnode));//製造一個新的頭結點 stack->next = NULL; } //2.判斷棧空的程式碼 int isEmpty(Stack stack) { if (stack->next==NULL) { return 1; } else { return 0; } } //3.進棧的程式碼 void push(Stack stack ,int x) { Stack p; p = (Lnode*)malloc(sizeof(Lnode));//為進棧元素申請空間 p->next = NULL;//這一句可以不寫,但是為了良好的程式碼習慣,建議加上 /* 以下三句就是單鏈表的頭插法 */ p->data = x; p->next = stack->next; stack->next = p;//讓頭結點重新指向新加入的元素 } //4.出棧的程式碼 int pop(Stack stack) { Stack p; int x; if (stack->next==NULL) { return 0; } /*以下就是單鏈表的刪除操作*/ p = stack->next; x = p->data; stack->next = p->next; //free(p); return x; } int main() { Stack stack=(Lnode*)malloc(sizeof(Lnode));//製造一個新的頭結點 stack->next = NULL; //初始化一個鏈棧 //initStack(stack); push(stack, 1); push(stack, 2); int ans = pop(stack); cout << ans << endl; int ans2 = pop(stack); cout << ans2 << endl; int f; cin >> f; return 0; }