C语言数据结构之栈(FILO)标准模式

C语言数据结构之栈(FILO)标准模式,第1张

C语言数据结构之栈(FILO)标准模式

关注博主不迷路~~~~
经过这两天对链表、队列和栈的学习,我发现他们都差不多,基本上都是一样的模板!只需要掌握好链表,然后就理解一下队列和栈的功能,比如为什么是FIFO、FILO,大家也可以看我之前的文章,里面都有详细的内容解释。
首先我们来说明一下栈的特点:
①栈其实就像我们的装 羽毛球的盒子一样,他具有先进后出、后进先出的特点,大家应该都玩过羽毛球,可以想象一下装羽毛球的盒子是如何装进去和取出来的过程, 这个我们就称之为栈!
②FILO = First input last output先进后出
③栈比较经典简单的题目例如:括号匹配等等
④大家可以关注一下博主,里面都有这些详细内容
⑤可以带大家一起学习数据结构与算法,C语言和java版的(我也是个小小初学者,小虾米戀)

//我将其具体步骤描述如下:
//①我们先对栈进行初始化 *** 作
//②有了栈以后,我们可以要把他销毁,所以进行清空 *** 作
//③在给栈添加具体功能,例如:获取栈顶元素、判断栈是否为空等等
//④比较重要的入栈!
//⑤比较重要的出栈!
//⑥栈的输出以及完善主函数。
//⑦我会将每步骤的代码都进行标号,大家可以跟着我的序号进行学习
#include 
#include 
typedef struct Stack{
	int *data;
	int top,size;
}Stack;

//①我们先对栈进行初始化 *** 作
Stack *init(int n){
	Stack *stc = (Stack*)malloc(sizeof(Stack)); //申请个空间、相当于创建个结点
	stc->data = (int*)malloc(sizeof(int)*n);//申请连续空间,因为data是int型的
	stc->top = -1;//我们先让栈顶指针指向-1,因为我们栈和数组一样嘛,都是要从0开始,大家认真看下面代码就懂啦~
	//写着写着发现其实赋值为0 也挺方便,就不改啦
	stc->size = n;//这个是我们栈的长度
	return stc;
}

//②有了栈以后,我们可以要把他销毁,所以进行清空 *** 作
int clear(Stack *stc){
	if(stc == NULL) return 0;//若为空 还销毁个毛啊
	free(stc->data); //和队列一样 先销毁数据
	free(stc);//在销毁空间
	return 1;
}

//③在给栈添加具体功能,例如:获取栈顶元素、判断栈是否为空等等
//获取栈顶元素
int topStack(Stack *stc){
	if(stc == NULL) return 0; //为空 还获取个毛线
	//也可以用我们的判空功能
	//if(empty(stc)) return 0;
	return stc->data[stc->top];
}
//判断栈是否为空
int empty(Stack *stc){
	return stc->top == -1; //若为-1 则肯定为空啊。返回true
}

//④比较重要的入栈!
int Push(Stack *stc,int val){ //val 为入栈值
	//先判断是否拥有入栈资格,说不定你不配入栈呢
	if(stc == NULL) return 0;
	if(stc->top +1 == stc->size) return 0;//这里和数组差不多哈,假如我们申请个a[10],他不就是0-9吗,但是他的长度为10, 所以同理啦
	stc->top += 1;//s->top++; 都可以啦
	stc->data[stc->top] = val;
	return 1;
}

//⑤比较重要的出栈!
int Pop(Stack *stc){
	//同理判断你是否拥有出栈资格!
	if(stc == NULL) return 0; //这是申请空间失败
	if(stc->top == -1) return 0;//这是栈为空,他俩不一样哦
	stc->top -= 1; //就这么简单一步就出栈成功!
	return 1;
}

//⑥栈的输出以及完善主函数。
int outPut(Stack *stc){
	printf("当前栈中元素数量=%d ",stc->top + 1);
	for(int i = stc->top; i > -1 ; i--){
		printf("%d ",stc->data[i]);
	}
	printf("n");
	return 1;
}

int main(){
	int n,choose,val;
	printf("输入你想要栈的长度");
	scanf("%d",&n);
	Stack *stc = init(n);
	do
    {
    	printf("[1]入栈n");
        printf("[2]出栈n");
        printf("[3]毁栈n");
        scanf("%d",&choose);
        switch(choose)
        {
        case 1:
            printf("入栈 *** 作n");
            scanf("%d",&val);
            Push(stc,val);
            outPut(stc);
            break;
        case 2:
            printf("出栈 *** 作");
            Pop(stc);
            outPut(stc);
            break;
        case 3:
            printf("栈的清空");
            clear(stc);
            break;
        }
    }while(choose<5);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5709982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存