您的位置:首页 > 理论基础 > 数据结构算法

链栈

2015-01-14 13:31 387 查看
栈的链式存储结构称为链栈,它是操作受限的单链表,其插入和删除操作仅限制在表头位置上进行。链栈通常用不带头结点的单链表来实现。栈顶指针就是链表的头指针。

1.相关声明

2.初始化,设置一个空栈

3.判断链栈是否为空

4.进栈

5.出栈

6.读取栈顶元素

7.测试语言

8.程序运行结果

1.

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define  OK 1
#define  ERROR 0
#define  OVERFLOW -1
#define  TRUE 1
#define  FALSE 0
typedef int Status;
typedef int Elem;
typedef struct SNode *LinkStack;

typedef struct SNode{
Elem data;
struct SNode * Next;
}SNODE;
2.

//设置一个空栈
LinkStack Init_stack()
{
LinkStack s;
s=NULL;
return s;
}
3.

//判断链栈是否为空
Status IsEmpty_stack(LinkStack L)
{
if (L==NULL)
{
return OK;
}
else
{
return ERROR;
}
}
4.

//插入一个新的栈顶元素,即:进栈
void Push_stack(LinkStack *L,Elem x)
{
SNODE *pNew=(SNODE *)malloc(sizeof(SNODE));
if (pNew==NULL)
{
exit(OVERFLOW);
}
pNew->data=x;
pNew->Next=*L;
*L=pNew;
}
5.

//删除栈顶元素,即:出栈
Elem Pop_stack(LinkStack *L)
{
LinkStack p;//暂存栈结点
Elem e;
if (*L==NULL)
exit(-1);
e=(*L)->data;//原栈顶元素
p=*L;
(*L)=(*L)->Next;
free(p);
return e;
}
6.

//读取栈顶元素
Elem Peek_stack(LinkStack top)
{
if (top==NULL)
{
printf("为空栈!\n");
exit(-1);
}
return top->data;
}


7.

int main()
{
int i;
Elem val;
Elem Item;
Elem x;
LinkStack s;//定义一个栈
s=(LinkStack)malloc(sizeof(SNODE));//分配内存空间
s=Init_stack();//初始化
printf("0-9依次入栈并输出:\n");
for(i=0;i<10;i++) //要对栈进行修改,则须传入栈顶指针的地址
{
Push_stack(&s,i);  //进栈
x=Peek_stack(s);  //取栈顶元素
printf("%d ",x);
}
printf("\n");
printf("\n");

while(!IsEmpty_stack(s))
{
val=Pop_stack(&s);  //出栈
printf("%d ",val);
}
printf("\n");
printf("\n");

x=Peek_stack(s);
printf("%d ",x);
printf("\n");
return 0;
}
8.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息