数据结构——链栈算法和操作

本文详细介绍了使用C++实现链式栈的基本结构与操作,包括初始化、判断空栈、入栈、出栈及获取栈顶元素等核心功能,并提供了完整的代码示例与测试结果。

1.完整代码

#include<iostream>
using namespace std;

#define TRUE    1
#define FALSE   0
#define OK      1
#define ERROR   0

typedef int SElemType;
typedef int Status;
typedef struct StackNode{
	SElemType data;
	struct StackNode *next;
}StackNode, *LinkStack;

/**************************基本函数*******************************/
//1.构造一个空栈,栈顶指针置空 
Status InitStack(LinkStack &S)
{
	S = NULL;
	return OK;
} 

//2.判断链栈是否为空
Status StackEmpty(LinkStack S)
{
	if ( S == NULL )
		return TRUE;
	else
		return FALSE;
} 

//3.链栈的入栈
Status Push(LinkStack &S, SElemType e)
{
	LinkStack p = new StackNode;	//生成新结点e 
	p->data = e;					//将结点数据域置为e 
	p->next = S;					//将新结点插入栈顶 
	S = p;							//修改栈顶指针 
	return OK;
} 

//4.链栈的出栈 
Status Pop(LinkStack &S, SElemType &e)
{
	if ( S == NULL )
		return ERROR;
	e = S->data;
	LinkStack p = S;
	S = S->next;
	delete p;
	return OK;
}

//5.取栈顶函数 用e返回
bool GetTop(LinkStack &S,SElemType &e) 
{
	if ( S == NULL ) 
		return false;//栈顶为空
	e=S->data;
	return true;
}


/**********************基本操作函数************************/

//入栈功能函数 调用Push函数 
void Push_To_Stack(LinkStack &S)
{
	int n;
	SElemType e;
	int flag;
	printf("请输入入栈元素个数(>=1):\n");
	scanf("%d",&n);
	printf("请输入栈中各元素的值: ");
	for(int i=0;i<n;i++)
	{
	 
	 scanf("%d",&e);
	 flag=Push(S,e);
	 if(flag)
	 	printf("%d已入栈\n",e);
	}
}

//出栈功能函数 调用Pop函数
void Pop_From_Stack(LinkStack &S)
{
	int n;
	SElemType e;
	int flag;
	printf("请输入出栈元素个数(>=1):\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		 flag=Pop(S,e);
		 if(flag)
		 	printf("%d已出栈\n",e);
		 else 
		{
			 printf("栈已空!!!\n");
			 break;
		}
	}
}

//取栈顶元素 
void Get_Top_Of_Stack(LinkStack S)
{
	SElemType e;
	bool flag; 
	flag=GetTop(S,e);
	if(flag)
		printf("栈顶元素为:%d\n",e);
	else 
		printf("栈已空!!!\n");
}


int main()
{
	LinkStack S;
	InitStack(S);
	Push_To_Stack(S);
	Get_Top_Of_Stack(S);
	Pop_From_Stack(S);
	
	return 0;
}

2.结果测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值