#include <stdio.h>
#include "stdlib.h"
//链栈实现
typedef struct Linknode {
int data;//数据域
struct Linknode *next;//指针域
}*LinkStack;//栈类型定义
//不带头结点的实现 S->NULL
//初始化栈
void InitStack(LinkStack &S) {
S = NULL;
}
//新元素入栈
bool Push(LinkStack &S,int e) {
Linknode *q = (struct Linknode*)malloc(sizeof(struct Linknode));
if(q == NULL)
return false;
q->data = e;
q->next = S;
S = q;
return true;
}
//栈空
bool StackEmpty(LinkStack S) {
return S == NULL;
}
//出栈操作
bool Pop(LinkStack &S,int &e) {
if(StackEmpty(S))
return false;
e = S->data;
Linknode *q = S;
S = S->next;
free(q);
return true;
}
//获取栈顶元素
bool GetTop(LinkStack &S,int &e) {
if(StackEmpty(S))
return false;
e = S->data;
return true;
}
void DestroyStack(LinkStack &S) {
int e = -1;
while (Pop(S,e)) {
printf("元素%d出栈\n",e);
}
}
int main() {
setbuf(stdout,NULL);//解决debug时候控制台没有输出
LinkStack S;
InitStack(S);
for (int i = 1; i <= 15; ++i) {
if(Push(S,i)) {
printf("新元素%d入栈成功\n",i);
}
}
int e = -1;
if(GetTop(S,e)) {
printf("栈顶元素:%d\n",e);
} else{
printf("栈空\n");
}
DestroyStack(S);
// while (Pop(S,e)) {
// printf("元素%d出栈\n",e);
// }
return 0;
}
数据结构复习:链栈实现
最新推荐文章于 2024-05-31 21:17:33 发布