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

顺序栈的基本操作(C语言实现,简单易懂!)

C/C++/C# 更新时间:发布时间: 百科书网 趣学号
一、学习内容

1、 顺序栈初始化

2、 顺序栈的入栈

3、 顺序栈的出栈

4、 顺序栈取栈顶

5、 顺序栈的清空

6、 顺序栈的销毁

7、 顺序栈的判空

8、 顺序栈的判满

9、所有元素出栈

10、求栈元素个数

二、总代码
#include
#include
#include
typedef int StackEntry;

typedef enum status
{
	success,fail
}Status;

typedef struct stack
{
	int top;
	int maxsize;
	StackEntry *entry;//动态分配 
}Stack,*StackPtr;

Status Stack_Init(StackPtr s,int size); 
Status Stack_Push(StackPtr s,StackEntry item);
Status Stack_Pop(StackPtr s,StackEntry *item);
Status Stack_Top(StackPtr s,StackEntry *item);
bool Stack_Clear(StackPtr s);
Status Stack_Destroy(StackPtr s);
bool Stack_Empty(StackPtr s);
bool Stack_Full(StackPtr s);
void Stack_All(StackPtr s);
Status Stack_Check(Status sInit);


Status Stack_Init(StackPtr s,int size)
{
	Status outcome=fail;
	s->entry=(StackEntry *)malloc(size*sizeof(StackEntry));
	if(s->entry!=NULL)
	{
		s->top=-1;//空栈
		s->maxsize=size;
		outcome=success;
	}
	return outcome;
}


Status Stack_Push(StackPtr s,StackEntry item)
{
	Status outcome=success;
	if(Stack_Full(s)==1)
	{
		outcome=fail;
	}
	else
	{
		s->top++;
		s->entry[s->top]=item;
	}
	return outcome;
}


Status Stack_Pop(StackPtr s,StackEntry *item)
{
	Status outcome=success;
	if(Stack_Empty(s)==true)
	{
		outcome=fail;	
	}	
	else
	{
		*item=s->entry[s->top];
		--s->top;
	}
	return outcome; 
} 	


Status Stack_Top(StackPtr s,StackEntry *item)
{
	Status outcome=success;
	if(Stack_Empty(s)==1)
	{
		outcome=fail;
	}
	else
	{
		*item=s->entry[s->top];
	}
	return outcome;
}

 
bool Stack_Clear(StackPtr s)
{
	s->top=-1;
	return true;
}
 
Status Stack_Destroy(StackPtr s)
{
	Status outcome=fail;
	if(s->entry!=NULL)
	{
		free(s->entry);
		s->entry=NULL;
		s->top=-1;
		outcome=success;
	}
	return outcome;
}


bool Stack_Empty(StackPtr s)
{
	return (s->top<=-1);	
}


bool Stack_Full(StackPtr s)
{
	return (s->top>=s->maxsize-1);//如果栈满则返回1 
}


void Stack_All(StackPtr s)
{
	int item,i;
	if(Stack_Empty(s)==true)printf("栈下溢!n");
	else
	{
		printf("从栈顶依次向底的元素为:n");
		for(i=s->top;i>=0;i--)
		{
			Stack_Pop(s,&item);
			printf("%dn",item);
		}		
	}

	
} 


Status Stack_Check(Status sInit)
{
	if(sInit==success)return success;
	else return fail;	
} 

int main()
{
	int number,i,n,size=0;
	StackEntry item;
	Status sInit=fail,sOther=fail;
	Stack s;
	printf("****************1、 顺序栈初始化t"); 
	printf("2、 顺序栈的入栈****************n");
	printf("****************3、 顺序栈的出栈t"); 
	printf("4、 顺序栈取栈顶****************n");
	printf("****************5、 顺序栈的清空t");
	printf("6、 顺序栈的销毁****************n");
	printf("****************7、 顺序栈的判空t");
	printf("8、 顺序栈的判满****************n");
	printf("****************9、 展示菜单选项t");
	printf("10、所有元素出栈****************n"); 
	printf("****************11、栈元素的个数t");
	printf("0、 结束该程序******************n");
	while(1)
	{
		printf("选项:");
		scanf("%d",&number); 
		switch(number)
		{
			case 1: {
						printf("请输入栈顶最大元素个数:");
						scanf("%d",&size); 
						sInit=Stack_Init(&s,size);
						if(sInit==success)  printf("初始化成功!n");
						else if(sInit==fail)printf("初始化失败!n");
						break;
					}
					
			case 2: {
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							printf("请输入入栈元素:");
							scanf("%d",&item);
							sOther=Stack_Push(&s,item);
							if(sOther==success)printf("入栈成功!n");
							else printf("栈上溢!n");
						} 
						break;
					}
			
			case 3 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							sOther=Stack_Pop(&s,&item);				
							if(sOther==success)printf("出栈元素为:%dn",item);
							else printf("栈下溢!n");			
						} 						
						break;
					}
			
			case 4 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							sOther=Stack_Top(&s,&item);
							if(sOther==success)printf("栈顶元素为:%dn",item); 
							else printf("栈下溢!n");
						} 						
						break;
					}
			
			case 5 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							if(Stack_Clear(&s)==true)printf("清空成功!n");
							else printf("清空失败!n");
						} 						
						break;
					}
			
			case 6 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							sOther=Stack_Destroy(&s);
							if(sOther==success)
							{
								printf("销毁成功!n"); 
								sInit=fail;	
							}
							else printf("销毁失败!n");
						} 					
						
						break;
					}
							
			case 7 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							if(Stack_Empty(&s)==1)printf("栈空!n");
							else printf("栈未空!n");
													
						} 
						break;	
					}
					
			case 8 :{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							if(Stack_Full(&s)==1)printf("栈满!n");
							else printf("栈未满!n"); 
														
						} 				
						break;
					}
			 
			case 9 :{
						printf("------------------------------------------------------------------------n");
						printf("****************1、 顺序栈初始化t"); 
						printf("2、 顺序栈的入栈****************n");
						printf("****************3、 顺序栈的出栈t"); 
						printf("4、 顺序栈取栈顶****************n");
						printf("****************5、 顺序栈的清空t");
						printf("6、 顺序栈的销毁****************n");
						printf("****************7、 顺序栈的判空t");
						printf("8、 顺序栈的判满****************n");
						printf("****************9、 展示菜单选项t");
						printf("10、所有元素出栈****************n"); 
						printf("****************11、栈元素的个数t");
						printf("0、 结束该程序******************n");
						printf("------------------------------------------------------------------------n");						
						break;
					}
			
			case 10:{
						if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n");
						else
						{
							Stack_All(&s);
						} 						
						break;
					}
			
			case 11:{
						printf("栈元素个数:%dn",s.maxsize); 
						break;
					}
								
			case 0 :{
						printf("再见,祝您生活幸福愉快!");
						return 0; 
					}
					
			default:{
						printf("请输入0~11内的整数!n");
						break;
					}			
		}	
	} 
}

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

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号