链栈(C语言实现)

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int DataType;
typedef struct SNode
{
	DataType data;
	struct SNode * next;
	
}*LinkStack;

bool Init_Stack(LinkStack * Top);					//	栈初始化(不带头结点) 
bool Push_Stack(LinkStack * Top, DataType x);		//	入栈 
bool Pop_Stack(LinkStack * Top, DataType * x);		//	出栈 
int GetTop_Stack(LinkStack Top);					//	获取栈顶元素 
bool Destroy_Stack(LinkStack * Top);				//	销毁栈 
bool Traverse_Stack(LinkStack Top);					//	遍历栈 
bool Empty_Stack(LinkStack Top);					//	判栈空 

int main() 
{
	DataType x; 
	LinkStack S;
	
	if(Init_Stack(&S))
		printf("链栈初始化成功!\n");
	else
		printf("链栈初始化失败!\n");
	 
	Push_Stack(&S,1);	
	Push_Stack(&S,4);
	Push_Stack(&S,7);
	Push_Stack(&S,2);	
	Push_Stack(&S,5);
	Push_Stack(&S,8);
	Push_Stack(&S,3);	
	Push_Stack(&S,6);
	Push_Stack(&S,9);	
	printf("遍历链栈:");
	Traverse_Stack(S);
	printf("\n\n");
	
	printf("栈顶元素:%d\n\n",GetTop_Stack(S));
	
	if(Pop_Stack(&S, &x))
	{
		printf("出栈成功!\n");
		printf("您出栈的元素:%d\n",x);
	}
	else
		printf("出栈失败!\n");
	printf("遍历链栈:");
	Traverse_Stack(S);	
	printf("\n\n");
	
	if(Destroy_Stack(&S))
		printf("销毁成功!\n");
	else
		printf("销毁失败!\n");
	printf("遍历链栈:");
	Traverse_Stack(S);
		
	return 0;
}

//	注意防止产生空指针 
bool Init_Stack(LinkStack * Top)
{
	*Top = NULL;		//	空栈时,栈顶指针指向空 
	return true;
} 

//	注意防止产生空指针
bool Push_Stack(LinkStack * Top, DataType x)	
{
	printf("入栈元素:%d\n",x);
	LinkStack p = (LinkStack)malloc(sizeof(struct SNode));
	if(!p)
	{
		printf("申请空间失败!\n");
		exit(-1);
	}
	
	p->data = x;
	p->next = *Top;
	*Top = p;
	return true;
}

//	注意防止产生空指针 
bool Pop_Stack(LinkStack * Top, DataType * x)
{
	if(Empty_Stack(*Top))
		return false;
		
	LinkStack p = *Top;
	*x = p->data;
	*Top = p->next;
	free(p);
	p = NULL;
	
	return true;
}

int GetTop_Stack(LinkStack Top)
{
	if(Empty_Stack(Top))
		return false;
	
	return Top->data;
}

//	注意防止产生空指针 
bool Destroy_Stack(LinkStack * Top)
{
	LinkStack p = *Top;
	 
	while(*Top)
	{
		p = p->next;
		free(*Top);
		*Top = p;
	} 

	return true;
}

bool Traverse_Stack(LinkStack Top)
{
	LinkStack p = Top;

	while(p)
	{
		printf("%3d",p->data);
		p = p->next;	
	}
	return true;
}


bool Empty_Stack(LinkStack Top)
{
	if(Top==NULL)
		return true;
	else
		return false;
}

猜你喜欢

转载自blog.csdn.net/Mr_Morgans/article/details/121083359