简单的链栈,实现了基本功能。
#include<stdio.h>
#include<stdlib.h>
//节点的存储结构
typedef struct SNode{
int data;
struct SNode* next;
}SNode, * SLNode;
//栈的结构
typedef struct {
int size;
SLNode top;
}LinkStack;
//初始化
void Init_Stack(LinkStack* s) {
s->top = (SLNode)malloc(sizeof(SNode));
if (!s->top) exit(0);
s->size = 0;
s->top= NULL;
printf("初始化完成\n");
}
//判空
int IsEmpty_Stack(LinkStack* s) {
return s->size == 0;
}
//压栈
void Push_Stack(LinkStack* s,int e) {
SLNode q = (SLNode)malloc(sizeof(SNode));
if (!q) exit(0);
else {
q->data = e;
q->next = s->top;
s->top = q;
s->size += 1;
}
}
//弹栈
void Pop_Stack(LinkStack* s,int &e) {
SLNode p = s->top;
SLNode q = p->next;
if (IsEmpty_Stack(s)) exit(0);
else {
e = p->data;
s->top = q;
free(p);
s->size -= 1;
}
}
//求栈的长度
int Lenth(LinkStack* s) {
return s->size;
}
//取栈顶
int GetTop_Stack(LinkStack* s) {
if (!IsEmpty_Stack(s)) return s->top->data;
else {
printf("是空栈.\n");
exit(0);
}
}
//清空数据
void Clear_Stack(LinkStack* s) {
SLNode p, q;
p = s->top;
while (p) {
q = p->next;
free(p);
p = q;
}
s->top = NULL;
s->size = 0;
printf("已完成清空\n");
}
//销毁
void Destroy_Stack(LinkStack* s) {
SLNode p, q;
p = s->top;
while (p) {
q = p->next;
free(p);
p = q;
}
free(s->top);
printf("栈已销毁\n");
}
//打印
void Print_Stack(LinkStack* s) {
if (IsEmpty_Stack(s)) exit(0);
else {
SLNode p = s->top;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
}
int main() {
int e = 0;
LinkStack s;
Init_Stack(&s);
printf("栈的长度是%d\n", Lenth(&s));
for (int i = 0; i < 5; i++)
Push_Stack(&s, i);
Print_Stack(&s);
Pop_Stack(&s, e);
printf("弹出的值是:%d\n", e);
Print_Stack(&s);
return 0;
}