链栈
2015-01-14 13:31
387 查看
栈的链式存储结构称为链栈,它是操作受限的单链表,其插入和删除操作仅限制在表头位置上进行。链栈通常用不带头结点的单链表来实现。栈顶指针就是链表的头指针。
1.相关声明
2.初始化,设置一个空栈
3.判断链栈是否为空
4.进栈
5.出栈
6.读取栈顶元素
7.测试语言
8.程序运行结果
1.
7.
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.