#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
typedef int DataType;
typedef struct LinkStack{
DataType data;
struct LinkStack* next; // 栈顶指针
}LinkStack;
bool StackEmpty(LinkStack *pStack);
void pushStack(LinkStack *pHead, int value);
DataType popStack(LinkStack *stack);
DataType getTop(LinkStack *pHead);
void destroyStack(LinkStack *stack);
int main() {
LinkStack *pLinkStack = (LinkStack *) malloc(sizeof(LinkStack));
pLinkStack->next = NULL;
pLinkStack->data = 0;
printf("栈是否为空:%d\n", StackEmpty(pLinkStack));
printf("8、6、5、4进栈\n");
pushStack(pLinkStack, 8);
pushStack(pLinkStack, 6);
pushStack(pLinkStack, 5);
pushStack(pLinkStack, 4);
printf("栈是否为空:%d\n", StackEmpty(pLinkStack));
printf("出栈:%d\n", popStack(pLinkStack));
printf("出栈:%d\n", popStack(pLinkStack));
printf("栈顶元素:%d\n", getTop(pLinkStack));
destroyStack(pLinkStack);
printf("销毁栈\n");
return 0;
}
/**
* 销毁栈
* @param stack
*/
void destroyStack(LinkStack *stack) {
LinkStack *temp = stack;
while (stack != NULL) {
stack = stack->next;
free(temp);
temp = stack;
}
}
/**
* 获取栈顶元素
* @param stack
* @return
*/
DataType getTop(LinkStack *pHead) {
if (pHead->next == NULL) {
return -1;
}
// 头结点后的第一个元素即为栈顶元素
return pHead->next->data;
}
/**
* 弹出栈顶元素
* @param stack
* @return
*/
DataType popStack(LinkStack *stack) {
if (stack->next == NULL) {
return -1;
}
// 释放栈顶空间、头结点指向下下个节点
LinkStack *temp = stack->next;
int data = temp->data;
stack->next = temp->next;
free(temp);
return data;
}
/**
* 入栈
* @param stack
* @param value
* @return
*/
void pushStack(LinkStack *pHead, int value) {
LinkStack *temp = (LinkStack *) malloc(sizeof(LinkStack));
temp->data = value;
// 新入栈的元素直接插入到头结点后
temp->next = pHead->next;
pHead->next = temp;
}
/**
* 判断栈是否为空
* @param pStack
* @return
*/
bool StackEmpty(LinkStack* pStack) {
return pStack->next == NULL ? true : false;
}
数据结构------链栈(C/C++)
最新推荐文章于 2024-07-25 08:55:54 发布