#include<malloc.h>
typedef int ElemType
typedef struct linknode
{
ElemType data //数据域
struct linknode *next //指针域
}LiStack //链栈类型的定义
//初始化栈
void InitStack(LiStack *&s)
{
s=(LiStack *)malloc(sizeof(LiStack))
s->next=NULL
}
//销毁栈
void ClearStack(LiStack *&s)
{
LiStack *p=s->next
while(p!=NULL)
{
free(s)
s=p
p=p->next
}
free(s)//
}
//求战的长度
void StackLength(LiStack *s)
{
int i=0
LiStack *p
p=s->next
while(p!=NULL)
{
i++
p=p->next
}
printf("目前此栈的长度为: %d\n",i)
}
//判断栈是否为空栈
void StackEmpty(LiStack *s)
{
if(s->next==NULL)
printf("目前此栈是空栈n")
else
printf("目前此栈不是空栈\n")
}
//进栈
void Push(LiStack *&s,ElemType e)
{
LiStack *p
p=(LiStack *)malloc(sizeof(LiStack))
p->data=e
p->next=s->next //插入*p结点作为第一个数据结点
s->next=p
}
//出栈
void Pop(LiStack *&s,ElemType &e)
{
LiStack *p
if(s->next==NULL)
{
printf("目前此栈是空栈,此次出栈失败了!\n")
}
else
{
p=s->next //p指向第一个数据结点
e=p->data
s->next=p->next
free(p)
printf("此次出栈成功,出栈元素是:%d\n",e)
}
}
//取栈顶元素
void GetTop(LiStack *s,ElemType &e)
{
LiStack *p
p=s->next
if(p==NULL)
printf("目前此栈是空栈,此次取栈顶元素失败了\n")
else
{
e=p->data
printf("此次取栈顶的元素是:%d\n",e)
}
}
//显示栈中元素
void DispStack(LiStack *s)
{
LiStack *p
p=s->next
if(p==NULL)
printf("此栈目前是空栈\n")
else
{
printf("下面输出链栈里的各个元素:\n")
while(p!=NULL)
{
printf("%d ",p->data)
p=p->next
}
printf("\n")
}
}
void main()
{
LiStack *s
int e
InitStack(s)
printf("请输入一个进栈元素:\n")
scanf("%d",&e)
while(e!=0)
{
Push(s,e)
DispStack(s)
StackLength(s)
printf("请输入一个进栈元素:\n")
scanf("%d",&e)
}
StackEmpty(s)
GetTop(s,e)
int i
printf("如果你想出栈元素,请按1\n")
scanf("%d",&i)
while(i==1)
{
Pop(s,e)
DispStack(s)
StackLength(s)
printf("如果你想继续出栈元素,请按1\n")
scanf("%d",&i)
}
printf("链栈的基本运算,到此操作完毕了哦!\n")
}
链式栈就是用链式存储结构表示一个栈,也就是指针域。根据栈的性质,知道栈是先进后出,所以只需要设置一个栈顶指针,还是说点C++吧
先构造一个结构模板
template<class
ElemType>
typedef
struct
Node
//建立
{
ElemType
data//数据成员,用于存储
struct
Node*next//指针成员,用于连接逻辑结构
}LNode
1.构造一个空栈,只需要:
LNode*head//定义栈顶指针
head=(LNode*)malloc(sizeof(LNode))//分配空间
head->next=NULL//下一个为空
2.新节点:比如新节点数据位1
入栈操作:
LNode*p
p->data=1
p->next=head
head=p
总之有点类似C语言里的链表
还有什么不清楚的可以追问
希望对你有所帮助!!!
#include <stdio.h>#include <malloc.h>
struct stack
{
int number
struct stack *next
}
struct stack *top//指向栈顶
struct stack *p//临时指针
//创建链栈
void create(int first_value)
{
p = (struct stack*)malloc(sizeof(struct stack))//申请内存空间
p->number = first_value//给栈底赋值
p->next = NULL//栈底的指针为空
top = p//栈顶指向栈底
}
//进栈
void input(int value)
{
p = (struct stack*)malloc(sizeof(struct stack))//申请内存空间
p->number = value//赋值
p->next = top//指向原来的栈顶
top = p//栈顶往上移动一位
}
//出栈
void output()
{
p = top//p = 栈顶
top = top->next//栈顶往下移动一位
free(p)//释放p
}
//清空栈
void clear()
{
while(top->next != NULL)//如果不是栈底
output()//出栈
free(top)//释放栈顶
}
//取栈顶元素
int topElement()
{
return top->number
}
int main()
{
int i
create(0)
for(i=1i<=10i++)
input(i)
//clear()
printf("\n栈的内容:\n")
for(p=topp=p->next)
{
printf("%d\n",p->number)
if(p->next == NULL)
break
}
printf("栈顶元素=%d\n",topElement())
}