数据结构与算法-顺序栈的操作及应用C语言实现(超详细注释/设计/实验/作业)

本文介绍了顺序栈的基础操作,包括初始化、入栈、出栈、获取栈顶元素、判空等。提供了用C语言实现的顺序栈代码示例,还涉及数制转换的算法。文章强调了理解栈的先进后出特性以及在编程中的应用,鼓励读者通过实践来学习和巩固知识。
摘要由CSDN通过智能技术生成

引言

多多点赞,火速更新中~~
相信大家学完基础栈之后,想小试牛刀,本章讲解栈的基础操作,先进后出FILO,话不多说,直接上实践。
也可以作为课程设计使用哦

学习目的

  1. 掌握顺序栈的存储结构
  2. 掌握顺序栈的基本操作
  3. 掌握顺序栈的基本特性

环境与设备

操作系统:Windows 10
编译器:DevC++

存储结构

typedef int DataType;
typedef struct
{	
DataType data[MAXSIZE];
 	 int top;
}SqStack;

算法描述

希望宝子们弄清楚下列问题,再看代码~
相信你能有所收获。

  1. 初始化栈算法描述:
  2. 入栈算法描述:
  3. 出栈算法描述:
  4. 获取栈顶元素算法描述:
  5. 判空算法描述:
  6. 数制转换算法描述:

函数原型

1.	void InitStack(SqStack *S)//初始化栈
2.	int push(SqStack *S,DataType x)//入栈
3.	int pop(SqStack *S)//出栈
4.	int get(SqStack *S)//获取栈顶元素
5.	int Empty(SqStack *S)//判空
6.	void DisStatck(SqStack *S) //显示栈中元素
7.	void Converse(int n,DataType x)//数制转换

核心代码

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
#define MAXSIZE 10
typedef int DataType;
typedef struct
{	
	DataType data[MAXSIZE];
 	int top;
}SqStack;
SqStack S;
void InitStack(SqStack *S);//初始化栈
int push(SqStack *S,DataType x);//入栈
int pop(SqStack *S);//出栈
int get(SqStack *S);//获取栈顶元素
int Empty(SqStack *S);//判空
void DisStatck(SqStack *S); //显示栈中元素
void Converse(int n,DataType x,SqStack *S);//数制转换
void menu();
void menu1();
int main()
{
	menu();
}
//初始化栈
void InitStack(SqStack *S)
{
	S->top=-1;
}
//入栈
int push(SqStack *S,int x)
{	
	if(S->top+1>MAXSIZE)
	{
		printf("当前栈已满\n");
		return 0;	
	} 
	else
	{
		S->top++;
		S->data[S->top]=x;
		printf("入栈成功\n"); 
	}
	
}
//出栈
int pop(SqStack *S)
{
	if(S->top<0)
	{
		printf("\t\t当前栈内元素为空,出栈失败!\n\n");
	}
	else
	{
		printf("当前出栈元素为:\t");
		printf("%d\n",S->data[S->top]);
		S->top--;
	}
	
	
}
//获取栈顶元素
int get(SqStack *S)
{
	if(S->top<0)
	{
		printf("\t\t当前栈内元素为空,出栈失败!\n\n");
	}
	else
	{
		printf("栈顶元素为:\t%d\n",S->data[S->top]);
	}
}
//判空
int Empty(SqStack *S)
{
	if(S->top==-1)
	{
		printf("当前栈为空\n");
	}
	else
	{
		printf("当前栈不为空\n");
	}
}
//显示栈中元素
void DisStatck(SqStack *S) 
{
	if(S->top==-1)
	{
		printf("当前栈为空\n");
	}
	else
	{
		printf("当前栈为\n");
		for(int i=S->top;i>=0;i--)
		{
			printf("%d\t",S->data[i]);
		}
	}
}
//数制转换	 
void Converse(int n,DataType x,SqStack *S)
{
	InitStack(S);
	int task=x;
	while(task>0)
	{
		S->top++;
		S->data[S->top]=task%n;
		task/=n;
	}
}
void menu()
{
	system("mode con cols=80 lines=45");
	system("color 30");
	printf("\t-------------------------------------------------------------\n");
	printf("\t*                        顺序栈                               *\n");
	printf("\t-------------------------------------------------------------\n");
	printf("\t*\t\t        1.初始化栈                            *\n");
	printf("\t*\t\t        2.入栈                                *\n");
	printf("\t*\t\t        3.出栈                                *\n");
	printf("\t*\t\t        4.获取栈顶元素                        *\n");
	printf("\t*\t\t        5.判空                                *\n");
	printf("\t*\t\t        6.显示栈中元素                        *\n");	
	printf("\t*\t\t        7.数制转换                            *\n");
	printf("\t-------------------------------------------------------------\n");

	printf("\t\t请选择功能\n");
	int a;
	scanf("%d",&a);
	while(a)
	{
		switch(a)
		{
			case 1:InitStack(&S);printf("初始化成功\n");break;
			case 2:
				{
					int x=0; 
					printf("请输入入栈元素\n");
					scanf("%d",&x);
					push(&S,x);
					break;
				}
			case 3:pop(&S);break; 
			case 4:get(&S);break;
			case 5:Empty(&S);break;
			case 6:DisStatck(&S);break;
			case 7:
			{
				InitStack(&S);
				int x,n;
				printf("请输入需要转换的进制和值\n");
				scanf("%d %d",&n,&x); 
				Converse(n,x,&S);
				break;
			}
			case 12:menu1();break;
			default:printf("\t\t还在紧张创作中!!!敬请期待!!!\n");
		}
		printf("\t\t请选择功能\n");
		printf("\t\t温馨提示输入12可查看菜单\n");
		scanf("%d",&a);
		system("cls");
	} 
}
void menu1()
{
	system("mode con cols=80 lines=45");
	system("color 30");
	printf("\t-------------------------------------------------------------\n");
	printf("\t*                        顺序栈                               *\n");
	printf("\t-------------------------------------------------------------\n");
	printf("\t*\t\t        1.初始化栈                            *\n");
	printf("\t*\t\t        2.入栈                                *\n");
	printf("\t*\t\t        3.出栈                                *\n");
	printf("\t*\t\t        4.获取栈顶元素                        *\n");
	printf("\t*\t\t        5.判空                                *\n");
	printf("\t*\t\t        6.显示栈中元素                        *\n");	
	printf("\t*\t\t        7.数制转换                            *\n");
	printf("\t-------------------------------------------------------------\n");

}


调试界面

在这里插入图片描述

总结

通过本次实验,掌握栈的一些基本操作。懂得入栈与出栈的特点,知道四则运算与含括号运算在栈中优先级的运用。
在实验中有很多东西,收益匪浅。我觉得,做实验必须掌握实验的基本原理,因此,牢固掌握书本上的基本知识很重要。
其次要有耐心,在程序运行之前可能会出现很多的错误,这就需要我们逐步的去调试,找出一个个错误,并改正,这样程序才能运行。不懂的问题多讨论。
感谢一键三连,谢谢大家~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员老茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值