#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;
// }
栈的基本操作及实现
最新推荐文章于 2024-09-10 09:00:00 发布