#define _CRT_SECURE_NO_WARNINGS 1
//链栈
#include <stdio.h>
#include <stdlib.h>
#define ok 1
#define error 0
typedef struct StackNode
{
int data;
struct StackNode* next;
}StackNode,*LinkStackPtr;
typedef struct
{
LinkStackPtr top;
int count;
}LinkStack;
//初始化
void InitStack(LinkStack* S)
{
S->top = (LinkStack*)malloc(sizeof(LinkStack));
S->top = NULL;
S->count = 0;
return;
}
//进栈
int Push(LinkStack* S, int e)
{
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
s->next = S->top;
S->top = s;
S->count++;
return ok;
}
//获取栈顶元素
int GetStack(LinkStack* S, int* e)
{
if (StackEmpty(&S))
return error;
*e = S->top->data;
return ok;
}
//判断栈是否为空
int StackEmpty(LinkStack* S)
{
if (S->top == NULL) return ok;
else return error;
}
//栈的长度
int StackLength(LinkStack* S,int *e)
{
if (S->count == 0)return error;
*e = S->count;
return ok;
}
//出栈
int Pop(LinkStack* S, int* e)
{
LinkStackPtr p;
if (StackEmpty(&S))
return error;
*e = S->top->data;
p = S->top;
S->top = S->top->next;
free(p);
S->count--;
return ok;
}
int main()
{
LinkStack S;
InitStack(&S);
int i, n, e,num;
printf("请输入进栈的个数: ");
scanf("%d", &n);
printf("\n请输入进栈元素: ");
for (i = 0; i < n; i++)
{
scanf("%d", &e);
Push(&S, e);
}
printf("栈顶元素是: ");
if (GetStack(&S, &e))
{
printf("%d\n", e);
}
else printf("该栈是空栈!!!\n");
printf("栈的长度: ");
if (StackLength(&S, &num))
{
printf("%d\n", num);
}
else printf("该栈是空栈!!!\n");
printf("请输入出栈个数: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
Pop(&S, &e);
printf("%d ", e);
}
printf("\n栈顶元素是: ");
if (GetStack(&S, &e))
{
printf("%d\n", e);
}
else printf("该栈是空栈!!!\n");
return 0;
}
数据结构--链栈
最新推荐文章于 2024-09-11 02:02:22 发布