1. 程式人生 > 其它 >棧的基本操作(連結串列)

棧的基本操作(連結串列)

棧的連結串列的操作和線性表的鏈式儲存結構差不多。

我們用圖來形象表達一下

線性表的順序儲存結構:

鏈棧:

鏈棧的基本操作有棧的初始化、插入資料、刪除資料、遍歷棧

對應的程式碼為:

//棧的初始化
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 }

執行結果為: