网页和网站的不同,建设美食网站的作用,域名信息查询网站,怎么做垂直自营网站文章目录 #x1f438;一、栈的概念及结构#x1f344;1、栈的概念定义#x1f344;2、动图演示#x1f332;入栈#x1f332;出栈#x1f332;整体过程 #x1f438;二、栈的实现#x1f438;三、数组结构栈详解#x1f34e;创建栈的结构⭕接口1#xff1a;定义结构… 文章目录 一、栈的概念及结构1、栈的概念定义2、动图演示入栈出栈整体过程 二、栈的实现三、数组结构栈详解创建栈的结构⭕接口1定义结构体ST⭕接口2初始化STInit⭕接口3销毁STDestroy⭕接口4入栈STPush⭕接口5出栈STPop⭕接口6取栈顶数据STTop⭕接口7判空STEmpty⭕接口8获取栈的大小STSize 四、完整代码Stack.hStack.cTest.c 一、栈的概念及结构
1、栈的概念定义 栈一种特殊的线性表其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶另一端称为栈底。栈中的数据元素遵守后进先出LIFOLast In First Out的原则。 压栈栈的插入操作叫做进栈/压栈/入栈入数据在栈顶。出栈栈的删除操作叫做出栈。出数据也在栈顶。 2、动图演示
入栈 出栈 整体过程 二、栈的实现 栈的实现一般可以使用数组或者链表实现相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小 三、数组结构栈详解 创建栈的结构 这里先创建三个文件 1️⃣Stack.h文件用于函数的声明 2️⃣Stack.c文件用于函数的定义 3️⃣Test.c文件用于测试函数 建立三个文件的目的 将栈作为一个项目来进行编写方便我们的学习与观察。 ⭕接口1定义结构体ST
请看代码与注释
//自定义类型
typedef int STDataType;
//创建栈的结构
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;⭕接口2初始化STInit
请看代码与注释
//初始化
void STInit(ST* pst)
{//断言传入指针不为NULLassert(pst);pst-a NULL;pst-top -1; //top指向栈顶数据pst-top 0; //top 指向栈顶数据的下一个位置pst-capacity 0;
}⭕接口3销毁STDestroy
请看代码与注释
//销毁
void STDestroy(ST* pst)
{//断言传入指针不为NULLassert(pst);//释放free(pst-a);pst-a NULL;pst-capacity pst-top 0;
}⭕接口4入栈STPush
请看代码与注释
//入栈
void STPush(ST* pst, STDataType x)
{if (pst-top pst-capacity){int newCapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* temp (STDataType*)realloc(pst-a, newCapacity * sizeof(STDataType));if (temp NULL){perror(realloc fail);return;}pst-a temp;pst-capacity newCapacity;}pst-a[pst-top] x;pst-top;
}⭕接口5出栈STPop
请看代码与注释
//出栈
void STPop(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst-top--;
}⭕接口6取栈顶数据STTop
请看代码与注释
//取栈顶数据
STDataType STTop(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst-a[pst-top - 1];
}⭕接口7判空STEmpty
请看代码与注释
//判空
bool STEmpty(ST* pst)
{assert(pst);return pst-top 0;
}⭕接口8获取栈的大小STSize
请看代码与注释
//获取栈的大小
int STSize(ST* pst)
{assert(pst);return pst-top;
}四、完整代码
Stack.h
#pragma once
#includestdio.h
#includestdlib.h
#includeassert.h
#includestdbool.htypedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;//初始化
void STInit(ST* pst);
//销毁
void STDestroy(ST* pst);
//入栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);
//取栈顶数据
STDataType STTop(ST* pst);
//判空
bool STEmpty(ST* pst);
//获取栈的大小
int STSize(ST* pst);Stack.c
#includeStack.h//初始化
void STInit(ST* pst)
{assert(pst);pst-a NULL;pst-top -1; //top指向栈顶数据pst-top 0; //top 指向栈顶数据的下一个位置pst-capacity 0;
}//销毁
void STDestroy(ST* pst)
{assert(pst);free(pst-a);pst-a NULL;pst-capacity pst-top 0;
}//入栈
void STPush(ST* pst, STDataType x)
{if (pst-top pst-capacity){int newCapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* temp (STDataType*)realloc(pst-a, newCapacity * sizeof(STDataType));if (temp NULL){perror(realloc fail);return;}pst-a temp;pst-capacity newCapacity;}pst-a[pst-top] x;pst-top;
}//出栈
void STPop(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst-top--;
}//取栈顶数据
STDataType STTop(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst-a[pst-top - 1];
}//判空
bool STEmpty(ST* pst)
{assert(pst);return pst-top 0;
}//获取栈的大小
int STSize(ST* pst)
{assert(pst);return pst-top;
}Test.c
#includeStack.h//入栈测试void TestStack1()
{ST st;STInit(st);STPush(st, 1);STPush(st, 2);STPush(st, 3);STPush(st, 4);while (!STEmpty(st)){printf(%d , STTop(st));STPop(st);}STDestroy(st);
}//测试
void TestStack2()
{ST st;STInit(st);STPush(st, 1);STPush(st, 2);printf(%d , STTop(st));STPop(st);STPush(st, 3);STPush(st, 4);while (!STEmpty(st)){printf(%d , STTop(st));STPop(st);}STDestroy(st);
}int main()
{//TestStack1();//TestStack2();return 0;
}这期内容相对比较简单希望烙铁们可以理解消化哦 总结 以上就是 【数据结构】栈—C语言版 的全部内容啦 本文章所在【数据结构与算法】专栏感兴趣的烙铁可以订阅本专栏哦 前途很远也很暗但是不要怕不怕的人面前才有路。 小的会继续学习继续努力带来更好的作品 创作写文不易还多请各位大佬uu们多多支持哦