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

1.完整代码

#include
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.结果测试

数据结构——链栈算法和操作_第1张图片

你可能感兴趣的:(数据结构——链栈算法和操作)