类C语言--链栈的基本操作:初始化,判断是否为空,进栈,出栈,取链栈栈顶元素

可以正常运行的代码,完整准确的类C语言

简介

链栈:运算是受限的单链表,栈的链式存储结果,只能在链表头部(栈顶)进行操作,所以没有必要附加头结点,栈顶指针就是头指针
是一种后进先出的线性表LIFO结构
空栈:不含任何元素的栈称为空栈

代码区

#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef struct StackNode
{
 SElemType data;   //数据域
 struct StackNode *next;   //指针域
}StackNode,*LinkStack;

enum Status{ERROR,OK};   //定义枚举类型,此处也可换为布尔类型的TRUE,FALSE

//链栈初始化
Status InitStack(LinkStack &S)
{
 S=NULL;  //S为空指针; 区分野指针:没有任何值指向,野指针是不允许的
 return OK;
}

//判断链栈是否为空
Status StackEmpty(LinkStack S)
{
 if(S==NULL)  //top=NULL也可
 return OK;
 else
 return ERROR;
}

//链栈进栈--压栈--就是插入的操作
Status Push(LinkStack &S,SElemType e)
{
 LinkStack p=new StackNode;  //生成新结点p
 if(!p)
 return ERROR;
 p->data=e;  //没有链栈满不满这一说法,因为链栈不是连续的
 p->next=S;
 S=p;
}

//链栈出栈--弹栈--删除的操作
Status Pop(LinkStack &S,SElemType &e)
{
LinkStack p;
 if(S==NULL)  
 return ERROR;   //栈空
 e=S->data;
 p=S;
 S=S->next;
 delete p;   //释放p空间。注意:delete 与new  对应使用;free与malloc对应使用
 return OK;
}

//取链栈栈顶元素
SElemType GetTop(LinkStack S)
{
if(S=NULL)
return ERROR;
else
return S->data;
}

int main()
{
    LinkStack S;
	SElemType e;
	int n,a;
	InitStack(S);   //初始化

	printf("input the number you want to push\n");   //输入进栈的元素个数
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&e);   //依次输入元素
		Push(S,e);    //入栈
	}
	
	a=GetTop(S);  //取栈顶元素
    printf("the element of top is %d\n",a);

    printf("now,look at all these elements\n");
	while(!StackEmpty(S))   //若栈非空
	{
		Pop(S,e);   //出栈
		printf("%d  ",e);
	}

    
	return 0;
}
发布了57 篇原创文章 · 获赞 54 · 访问量 2358

猜你喜欢

转载自blog.csdn.net/September_C/article/details/104937098