赞
踩
链栈是指采用链式结构实现的栈,和单链表的存储结构相同,用数据域和指针域分别代表存储的数据与指针,与单链表不同的是链栈不需要头结点,且只对栈顶元素依次进行入栈和出栈操作,遵循先入后出的原则。
- 入栈
- 出栈
typedef char DataType;
typedef struct LNode
{
DataType data;
struct LNode *next;
}LinkStack;
// 初始化
void InitStack(LinkStack **LS)
{
// 链栈不需要头结点,故初始即为空
(*LS) = NULL;
printf("链栈已初始化!\n");
}
// 入栈
void Push(LinkStack **LS)
{
DataType x;
fflush(stdin);
printf("请输入入栈数据:");
scanf("%c", &x);
// 创建一个新的结点
LinkStack *s;
s = (LinkStack *)malloc(sizeof(LinkStack));
s->data = x;
// 采用头插法,修改头指针的指向
s->next = (*LS);
(*LS) = s;
printf("已入栈:%c\n", x);
}
// 出栈
void Pop(LinkStack **LS)
{
LinkStack *p = (*LS);
if (p != NULL)
{
// 删除第一个结点,并修改头指针指向
(*LS) = (*LS)->next;
printf("出栈结点:%c\n", p->data);
free(p);
}
else
{
printf("栈空!\n");
}
}
// 获取栈顶元素
void GetTop(LinkStack *LS)
{
if (LS != NULL)
{
printf("栈顶元素为:%c\n", LS->data);
}
else
{
printf("栈为空!\n");
}
}
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
typedef struct LNode
{
DataType data;
struct LNode *next;
}LinkStack;
// 初始化
void InitList(LinkStack **LS)
{
// 链栈不需要头结点,故初始即为空
(*LS) = NULL;
printf("链栈已初始化!\n");
}
// 入栈
void Push(LinkStack **LS)
{
DataType x;
fflush(stdin);
printf("请输入入栈数据:");
scanf("%c", &x);
// 创建一个新的结点
LinkStack *s;
s = (LinkStack *)malloc(sizeof(LinkStack));
s->data = x;
// 采用头插法,修改头指针的指向
s->next = (*LS);
(*LS) = s;
printf("已入栈:%c\n", x);
}
// 出栈
void Pop(LinkStack **LS)
{
LinkStack *p = (*LS);
if (p != NULL)
{
// 删除第一个结点,并修改头指针指向
(*LS) = (*LS)->next;
printf("出栈结点:%c\n", p->data);
free(p);
}
else
{
printf("栈空!\n");
}
}
// 获取栈顶元素
void GetTop(LinkStack *LS)
{
if (LS != NULL)
{
printf("栈顶元素为:%c\n", LS->data);
}
else
{
printf("栈为空!\n");
}
}
// 遍历栈序列
void Display(LinkStack *LS)
{
while (LS)
{
printf("%c->", LS->data);
LS = LS->next;
}
printf("NULL]\n");
}
int main()
{
printf("****************************\n");
printf("0:退出\t1:入栈\t2:出栈\n");
printf("3:取栈顶元素\t4:遍历栈序列\n");
printf("****************************\n");
int k;
LinkStack *LS;
InitStack(&LS);
while (1)
{
printf("请输入操作序号:");
scanf("%d", &k);
if (!k)
{
break;
}
switch (k)
{
case 1: Push(&LS); break;
case 2: Pop(&LS); break;
case 3: GetTop(LS); break;
case 4: Display(LS);break;
default: break;
}
printf("\n");
}
system("pause");
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。