数据结构(栈结构之顺序栈操作实现一)
目录
一.栈结构之顺序栈操作实现
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 8
typedef 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语言的无限可能!一起站在科技的前沿,迈向更美好的未来🌟。