欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 数据结构(栈结构之顺序栈操作实现一)

数据结构(栈结构之顺序栈操作实现一)

2025/2/8 5:07:49 来源:https://blog.csdn.net/weixin_48681435/article/details/145413211  浏览:    关键词:数据结构(栈结构之顺序栈操作实现一)

目录

一.栈结构之顺序栈操作实现

1.项目结构以及初始代码

2.初始化栈结构

3.入栈操作并显示

4.出栈操作并显示出栈元素

5.获取栈长度

6.清空栈

7.销毁栈

8.动态扩展栈空间


一.栈结构之顺序栈操作实现

1.项目结构以及初始代码

SeqStack.h

#ifndef __SEQSTACK_H__
#define __SEQSTACK_H__#include <stdio.h>
#include <malloc.h>
#include <assert.h>#define ElemType int
#define STACK_INIT_SIZE 8typedef struct SeqStack
{ElemType* base;int capacity;int top;// 指示栈顶位置,也表示栈中的元素个数
}SeqStack;#endif

SeqStack.c

#include "SeqStack.h"

main.c

#include <stdio.h>
#include "SeqStack.h"int main(int argc, char** argv)
{SeqStack st;return 0;
}

要学习更多嵌入式C的知识,可以扫码关注


2.初始化栈结构

SeqStack.h

void InitStack(SeqStack* s);

SeqStack.c

void InitStack(SeqStack* s)
{s->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);assert(s->base != NULL);s->capacity = STACK_INIT_SIZE;s->top = 0;
}

main.c

3.入栈操作并显示

SeqStack.h

SeqStack.c

// 辅助函数,判断栈是否为空或者满
int isFull(SeqStack* s)
{if (s->top >= s->capacity){return 1;}else{return 0;}
}int isEmpty(SeqStack* s)
{if (s->top == 0){return 1;}else{return 0;}
}void Push(SeqStack* s, ElemType x)
{if (isFull(s) == 1){printf("栈空间已满,%d不能入栈.\n",x);return;}s->base[s->top] = x;s->top++;
}void Show(SeqStack* s)
{for (int i = s->top - 1; i >= 0; i--){printf("%d\n", s->base[i]);}
}

main.c

4.出栈操作并显示出栈元素

SeqStack.h

SeqStack.c

int GetTop(SeqStack* s, ElemType* v)
{if (isEmpty(s)){printf("栈空间已空,不能取栈顶元素.\n");return 0;}*v = s->base[s->top - 1];// 不能写成*v = s->base[s->top--];因为s->top--会有出栈操作return 1;
}void Pop(SeqStack* s)
{if (isEmpty(s)){printf("栈空间已空,不能出栈.\n");return;}s->top--;
}

main.c

5.获取栈长度

SeqStack.h

SeqStack.c

int Length(SeqStack* s)
{return s->top;
}

6.清空栈

SeqStack.h

SeqStack.c

void Clear(SeqStack* s)
{s->top = 0;
}

main.c

7.销毁栈

SeqStack.h

SeqStack.c

void Destroy(SeqStack* s)
{free(s->base);s->base = NULL;s->capacity = 0;s->top = 0;
}

8.动态扩展栈空间

SeqStack.h

SeqStack.c

int Inc(SeqStack* s)
{ElemType* newbase = (ElemType*)realloc(s->base,sizeof(ElemType) * (s->capacity + STACK_INC_SIZE));if (newbase == NULL){printf("内存不足,无法申请空间.\n");return 0;}s->base = newbase;s->capacity += STACK_INC_SIZE;return 1;
}

main.c

如果你对C语言 和其他先进技术感兴趣,请别忘了点赞👍、收藏⭐️,并关注我们! 我们将持续为大家带来更多精彩内容,探索嵌入式C语言的无限可能!一起站在科技的前沿,迈向更美好的未来🌟。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com