1. 程式人生 > >棧的基本操作及實現

棧的基本操作及實現

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <iostream>

typedef int ElementType;
//定義結點
typedef struct LinkNode{
    ElementType data;
    struct LinkNode* next;
} *StackNode, *QueueNode;
//定義棧
typedef struct {
    LinkNode *top;
} LinkStack;

//初始化棧
LinkStack*
InitStack(LinkStack *L){ printf("初始化棧\n"); L = (LinkStack*)malloc(sizeof(LinkStack)); L->top = (LinkNode*)malloc(sizeof(LinkNode)); L->top->next = NULL; return L; } //判斷棧是否為空 bool isStackEmpty(LinkStack* L){ printf("判斷棧是否為空\n"); if (L->top->next == NULL) return
true; else return false; } //入棧 StackNode Push(LinkNode *head, ElementType data){ //首先判斷棧是否已滿,但這裡是鏈棧,則不做是否已滿的判斷 //我們在這個子方法裡面新建一個節點,判斷這個節點是否能被分配空間 StackNode S = (StackNode)malloc(sizeof(LinkNode)); if (S == NULL){ printf("沒有多餘的空間可以分配\n"); exit(0); } S->data =
data; printf("S->data=%d, data=%d\n", S->data, data); S->next = head->next; head->next = S; printf("head->next->data=%d\n", head->next->data); return head; } //出棧,返回要出棧的元素 ElementType Pop(LinkNode* head){ printf("進行一次pop,"); ElementType data; //首先判斷棧是否為空 if (head->next == NULL){ printf("棧為空,無法出棧\n");getchar();getchar();exit(0); } data = head->next->data; LinkNode* node = head->next; head->next = node->next; free(node); //printf("棧頂元素現在是:%d\n", head->next->data); return data; } //返回棧頂元素 ElementType GetTop(LinkNode* head){ if (head->next == NULL) printf("棧為空,無法輸出元素\n"); ElementType data = head->next->data; printf("棧頂元素為:%d\n", data); } // int main(void) // { // LinkStack* Stack; // Stack = InitStack(Stack); // if (isStackEmpty(Stack) == true){ // printf("棧為空,繼續進行程式\n"); // } // Stack->top = Push(Stack->top, 5); // printf("Stack->top->data=%d\n", Stack->top->data); // GetTop(Stack->top); // //printf("%d ", Pop(Stack->top)); // Stack->top = Push(Stack->top, 3); // GetTop(Stack->top); // Stack->top = Push(Stack->top, 1); // GetTop(Stack->top); // Stack->top = Push(Stack->top, 7); // GetTop(Stack->top); // printf("出棧的元素是:%d\n", Pop(Stack->top)); // printf("出棧的元素是:%d\n", Pop(Stack->top)); // printf("出棧的元素是:%d\n", Pop(Stack->top)); // Stack->top = Push(Stack->top, 2); // GetTop(Stack->top); // getchar(); // getchar(); // return 0; // }