棧的基本操作及實現
阿新 • • 發佈:2019-01-06
#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;
// }