可以做代销的网站都有哪些,个人怎么自己建网站,怎么运营自己的网站,科技让生活更美好作文500字提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出入栈展示 3.2进栈同时也在出栈的展示 前言
世上有两种耀眼的光芒一种是正在升起的太阳一种是正在努力学习编程的你!一个爱学编程的人。各位看官我衷心的希望这篇博客能对你们有所帮助同时也希望各位看官能对我的文章给与点评希望我们能够携手共同促进进步在编程的道路上越走越远 提示以下是本篇文章正文内容下面案例可供参考
一、栈
1.1栈的概念及结构 数组数组一般适合尾插和尾删所以一般栈顶在尾部。双向链表实现尾插、尾删和头插、头删都一样都符合后进先出的原则所以栈顶可以是头也可以是尾。单链表实现适合头插和头删栈顶只能是头。 栈的规则后进去的要先出来后进先出联想弹夹 top两种设计方案1、如果top指向栈顶元素设空栈时给top 0,那么当空栈中插入一个元素时由于top指向的是栈顶元素top还是0此时没法区分到底是空栈还是有一个元素的栈那就设空栈时给top -1当在栈中插入一个元素时top 0 2、如果top指向栈顶元素的下一个位置设空栈时给top 0当在栈中插入一个元素时top指向栈顶元素的下一个位置所以top 1也可以看成top就是栈中的数据个数 二、栈的实现
2.1头文件的实现—Stack.h
#pragma once
#include stdio.h
#include stdlib.h
#include assert.h
#include stdbool.htypedef int STDataType;
typedef struct stack
{STDataType* a;int top;//标识栈顶的位置int capacity;
}ST;//初始化
void STInit(ST* pst);
//销毁
void STDestory(ST* pst);//压栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);//获取栈顶元素
STDataType STTop(ST* pst);//判空
bool STEmpty(ST* pst);//统计栈内元素个数
int STSize(ST* pst);
2.2源文件的实现—Stack.c
#define _CRT_SECURE_NO_WARNINGS 1
#include Stack.h//初始化
void STInit(ST* pst)
{assert(pst);pst-a NULL;//表示top指向栈顶元素的下一个位置pst-top 0;//表示top指向栈顶元素//pst-top -1;pst-capacity 0;
}
//销毁
void STDestory(ST* pst)
{assert(pst);free(pst-a);pst-a NULL;pst-capacity pst-top 0;
}//压栈
void STPush(ST* pst, STDataType x)
{assert(pst);//判断数组栈空间是否足够if (pst-top pst-capacity){int newcapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* tmp (STDataType*)realloc(pst-a, sizeof(STDataType) * newcapacity);if (tmp NULL){perror(realloc fail);return;}pst-a tmp;pst-capacity newcapacity;}pst-a[pst-top] x;pst-top;
}
//出栈
void STPop(ST* pst)
{assert(pst);assert(pst-top 0);pst-top--;
}//获取栈顶元素
STDataType STTop(ST* pst)
{assert(pst);assert(pst-top 0);return pst-a[pst-top - 1];
}//判空
bool STEmpty(ST* pst)
{assert(pst);//判断数组栈为空//1、如果top是指向栈顶元素的下一个位置那当top 0时栈为空//2、如果top时指向栈顶元素那当top -1时栈为空/*if (pst-top 0){return true;}else{return false;}*/return pst-top 0;
}//统计栈内元素个数
int STSize(ST* pst)
{assert(pst);//1、如果top指向栈顶元素的话栈内元素的个数为top1//2、如果top指向栈顶元素的下一个位置的话栈内元素的个数为topreturn pst-top;
}
2.3源文件的测试—test.c
#include Stack.hint main()
{ST s;STInit(s);STPush(s, 1);STPush(s, 2);STPush(s, 3);printf(%d , STTop(s));STPop(s);STPush(s, 4);STPush(s, 5);//入栈顺序一种 -- 出栈顺序多种//是一对多的关系while (!STEmpty(s)){printf(%d , STTop(s));STPop(s);}printf(\n);return 0;
}三、栈的实际测试数据展示 1.栈的出栈和入栈的关系是一对多的关系。 2.元素出入栈的规则后进先出。 3.1正常的出入栈展示 3.2进栈同时也在出栈的展示 总结
好了本篇博客到这里就结束了如果有更好的观点请及时留言我会认真观看并学习。不积硅步无以至千里不积小流无以成江海。