#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int SElemType;//定义类型
typedef struct StackNode{
SElemType data;
struct StackNode *next;//定义链栈的结构体
}StackNode,*LinkStack;
LinkStack S;
//初始化
int InitStack(LinkStack &S){
S=NULL;
return OK;
}
//入栈
int Push(LinkStack &S,SElemType e){
StackNode *p = (StackNode *)malloc(sizeof(StackNode));//生成新结点
p->data=e;//将新结点的数据域置为e
p->next=S;//将新结点插入栈顶
S=p;//修改栈顶指针为p
return OK;
}
//出栈
int Pop(LinkStack &S,SElemType &e){
StackNode *p = (StackNode *)malloc(sizeof(StackNode));//生成新结点
if(S==NULL) return ERROR;//判断是否栈空
e=S->data;//保存栈顶元素
p=S;//用p保存栈顶元素
S=S->next;//修改栈顶指针
free (p);//释放原栈顶元素
return OK;
}
//取栈顶元素
SElemType GetTop(LinkStack S){
if(S!=NULL){//判断是否栈空
return S->data;//返回栈顶元素的值,栈顶指针不变
}
}
int main(){
LinkStack S;
InitStack(S);
printf("链栈初始化完成\n");
S=NULL;
Push(S, 3);
Push(S, 2);
Push(S, 1);
printf("入栈后元素为:");
LinkStack p=S;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
SElemType e;
Pop(S, e);
printf("出栈元素为:%d\n",e);
printf("出栈后元素为:");
p=S;
while (p) {
printf("%d", p->data);
p=p->next;
}
printf("\n");
SElemType e1= GetTop(S);
printf("栈顶元素为: %d\n", e1);
return 0;
}
链栈的基本操作
最新推荐文章于 2024-07-17 12:13:29 发布