顺序栈C语言操作

本文介绍了在C语言中如何实现顺序栈,包括栈的定义、初始化、进栈和退栈操作。作者分享了在编写和调试代码过程中的经验,强调了调试在程序员工作中的重要性,以及学习调试技巧对职业生涯的长远价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10分钟写代码,1小时改代码,微笑.jpg,改代码语法错误编译器就能找出来,逻辑错误就mmp了,涉及到系统堆栈就更痛苦了。然而最扎心的时,改了一个早上调了一个早上,结果标点符号没改一个就运行成功了,我的编译器这是存心和我作对呢吧!电脑还十分配合的动不动就来个没有相应。配置低的电脑加win7真让我心力交瘁。吐槽完了,要干正事了,选择了就要坚持啊!

  • 栈的介绍
    栈是一种运算受限的线性结构,只能在表尾进行操作,这特殊的一端呢我们称之为栈顶top,表头称作栈底base。
    考试的时候呢,会涉及到1、进出栈的顺序;2、栈的容量;3、栈中元素的指针。网上很多例题,这里不再赘述了,直接上代码吧。原本很简单的结构却折腾了我一早上。

1、头文件以及宏定义等

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

typedef int SElemType;
#define STACK_INIT_SIZE 20//存储空间初始分配量
#define STACKINCREMENT 10//存储空间初始分配量

2、顺序栈的定义

//顺序栈的定义
typedef struct {
	SElemType *base;//栈底指针
	SElemType *top;//栈顶指针
	int stacksize;//当前可使用最大容量
}SqStack;

3、栈的初始化

//初始化栈
SqStack Initstack(SqStack &S){
	if(!(S.base =(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType))))exit(-1);
	S.top =S.base ;
	S.stacksize =STACK_INIT_SIZE;
	return S;
}

4、进栈(说明一下:当栈非空时,栈顶指针时指向栈顶元素的上一个位置的)

//插入一个元素
SqStack Push(SqStack &S,SElemType e){
	if(S.top -S.base >=S.stacksize ){//栈满扩容
		S.base =(SElemType*)realloc(S.base ,(S.stacksize +STACKINCREMENT)*sizeof(SElemType));
		if(!S.base ) exit(-1);
		S.top =S.base +S.stacksize ;
		S.stacksize +=STACKINCREMENT;
	}
	*S.top=e;//先插入后移指针
	S.top ++;
	return S;
}

5、退栈

//退栈
int Pop(SqStack&S){
	if(S.base ==S.top )return -1;
	printf("%d\t",*--S.top );
	return 0;
}

6、主函数

int _tmain(int argc, _TCHAR* argv[])
{
	int arr[6],i;
	SqStack S;
	S=Initstack(S);

	for(i=0;i<10;i++){
		arr[i]=rand()%10+15;//自动生成15-25的随机正整数,不包括25
		printf("%d\t",arr[i]);
	}

	for(i=0;i<10;i++)
		Push(S,arr[i]);

	while(S.top){
		Pop(S);
	}
	system("pause");
	return 0;
}

在这里插入图片描述
这里直接用的系统生成的随机数,懒得输入了。要从事程序员这个行业,调试比写代码重要多了,新入门的小伙伴们,一定不要嫌调试太麻烦,改代码虽然很花费时间,但是学到的东西却是职业生涯中终生受用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟_张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值