zl程序教程

您现在的位置是:首页 >  后端

当前栏目

数据结构:链栈部分函数实现

数据结构 实现 函数 部分
2023-09-27 14:22:47 时间
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct stacknode
{
	DataType data;
	struct stacknode *next;
}LinkStack;
LinkStack *InitStack()
{
	LinkStack *S;
	S = NULL;
	return S;
}
int EmptyStack(LinkStack *S)
{
	if(S == NULL){
		return 1;
	}else{
		return 0;
	}
}
LinkStack *Push(LinkStack *S , DataType x)
{
	LinkStack *P;
	P = (LinkStack*)malloc(sizeof(LinkStack));
	P->data = x;
	P->next = S;
	S = P;
	return S;
}
LinkStack *Pop(LinkStack *S , DataType *x)
{
	LinkStack *P;
	if(EmptyStack(S)){
		printf("\t栈空,不能出栈!");
		return NULL;
	}else{
		*x = S->data;
		P = S;
		S = S->next;
		free(P);
		return S;
	}
}
int GetTop(LinkStack *S , DataType *x)
{
	if(EmptyStack(S)){
		printf("栈空!");
		return 0;
	}else{
		*x = S->data;
		return 1;
	}
}
void ShowStack(LinkStack *S)
{
	LinkStack *p = S;
	if(p == NULL){
		printf("\t栈空\n");
	}else{
		printf("从栈顶起个元素为:");
		while(p!=NULL){
			printf("%d",p->data );
			p = p->next;
		}
	}
 } 
int main()
{
	LinkStack *S;
	S = InitStack();
	printf("初始化成功!\n");
	int i , n , x;
	if(EmptyStack(S)){
		printf("栈空\n"); 
	}
	printf("请输入入栈元素的个数:");
	scanf("%d",&n);
	printf("请输入%d个整数进行入栈:",n);
	for(i = 0 ; i < n ; i++){
		scanf("%d",&x);
		S = Push(S,x);
	}
	S = Pop(S , &x);
	if(S != NULL){
		printf("%5d",x);
	}
	if(GetTop(S,&x)){
		printf("栈顶元素为:%d",x);
	}
	ShowStack(S);
	return 0;
}