C语言编程数据结构编程练习-顺序栈的操作

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 


#define MAX_SIZE 20


//通过数组的方式创建顺序栈  出栈,入栈等操作
typedef int elementType;

typedef struct stack
{
	elementType data[MAX_SIZE];
	int top;//栈顶
	int bottom;//栈底
}Stack;

void print_menu();
void stack_init(Stack* sta);
bool is_empty(Stack sta);
void stack_enter(Stack* sta);
void stack_out(Stack* sta);
void stack_print(Stack sta);
void stack_clean(Stack* sta);

int main()
{
	int order;

	Stack sta;

	print_menu();
	while (1)
	{
		printf("请选择操作指令:");
		scanf(" %d", &order);
		switch (order)
		{
		case 1:
			//初始化
			stack_init(&sta);
			break;
		case 2:
			//判断栈是否为空
			if (is_empty(sta))
				printf("空栈\n");
			else
				printf("不是空栈");

			break;
		case 3:
			//进栈(压栈)

			stack_enter(&sta);

			break;
		case 4:
			//出栈(弹栈)弹出栈顶元素
			stack_out(&sta);

			break;
		case 5:
			//遍历栈
			stack_print(sta);

			break;
		case 6:
			//清栈,将栈中元素全部置0
			stack_clean(&sta);

			break;
		case 7:
			//退出
			return;

		default:
			printf("指令输入有误,请重新输入\n");
			break;
		}



	}


	return 0;
}

//指令菜单
void print_menu()
{
	printf("操作指令如下:\n");
	printf("1----初始化栈\n");
	printf("2----判断栈是否为空\n");
	printf("3----进栈(压栈)\n");
	printf("4----出栈(弹栈)弹出栈顶元素\n");
	printf("5----遍历栈\n");
	printf("6----清栈,将栈中元素全部置0\n");
	printf("7---退出\n");

}

//初始化一个空栈,栈顶和栈底都置为-1;
void stack_init(Stack* sta)
{
	sta->bottom = -1;
	sta->top = -1;

	printf("初始化成功\n");
}

//判空  如果空栈返回1,否则返回0
bool is_empty(Stack sta)
{
	assert(&sta);

	if (sta.bottom == -1)//sta.top == -1 也可以
	{
		return true;
	}
	
	return false;
}

//进栈
void stack_enter(Stack* sta)
{

	//判满
	if (sta->top >= MAX_SIZE - 1)
	{
		printf("栈已满,无法入栈\n");
		return;
	}
	int value;
	printf("请输入要入栈的值:");
	scanf(" %d", &value);

	//判空
	if (is_empty(*sta))
	{
		sta->bottom = 0;
	}
	sta->top++;
	sta->data[sta->top] = value;

	printf("入栈成功\n");
}

//出栈(弹栈)  找出栈顶元素,弹出,并返回该元素值
void stack_out(Stack* sta)
{
	if (is_empty(*sta))
	{
		printf("栈为空");
		return;
	}

	//保存栈顶元素
	elementType temp = sta->data[sta->top];
	if (sta->top == 0)//如果栈里面只有一个元素,则需要把栈低制-1
	{
		sta->bottom = -1;
	}
	
	sta->top--;

	printf("栈顶元素%d出栈成功\n", temp);

}


void stack_print(Stack sta)
{
	if (is_empty(sta))
	{
		printf("空栈,无法遍历\n");
		return;
	}

	for (int i = sta.bottom; i <= sta.top; i++)
	{
		printf(" %d ", sta.data[i]);
	}
	printf("\n");
}

void stack_clean(Stack* sta)
{
	if (is_empty(*sta))
	{
		printf("空栈,无法清零\n");
		return;
	}

	for (int i = sta->bottom; i <= sta->top; i++)
	{
		sta->data[i] = 0;
	}
	printf("清零成功\n");
}

你可能感兴趣的:(#,C,语言数据结构研习汇,C,c语言,数据结构,开发语言)