栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链栈(C语言实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链栈(C语言实现)

#include
#include
#include
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("nn");
	
	printf("栈顶元素:%dnn",GetTop_Stack(S));
	
	if(Pop_Stack(&S, &x))
	{
		printf("出栈成功!n");
		printf("您出栈的元素:%dn",x);
	}
	else
		printf("出栈失败!n");
	printf("遍历链栈:");
	Traverse_Stack(S);	
	printf("nn");
	
	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("入栈元素:%dn",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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号