租空间做网站需要多少钱,购物网站建设的目的,如何在百度上搜索到自己的网站,免费一级域名注册教程#x1f308;个人主页#xff1a;羽晨同学
#x1f4ab;个人格言:“成为自己未来的主人~” 栈
栈的概念及结构 栈#xff1a;一种特殊的线性表#xff0c;其只允许在固定的一段进行插入和删除元素操作#xff0c;进行数据输入和删除操作的一端称为栈顶#xff0c;另…
个人主页羽晨同学
个人格言:“成为自己未来的主人~” 栈
栈的概念及结构 栈一种特殊的线性表其只允许在固定的一段进行插入和删除元素操作进行数据输入和删除操作的一端称为栈顶另一端称为栈底。栈中的数据元素遵守后进先出LIFOLast in first out的原则。
压栈栈的插入操作叫做进栈/压栈/入栈入数据在栈顶
出栈栈的删除操作叫做出栈出数据也是在栈顶
后进先出Last in first out 栈的实现
栈的实现一般可以使用数组或者链表实现相对而言数组的结构实现更优一些因为数组在尾上插入数据的代价比较小。 #pragma once
#includecode.4.5.stack.h#includestdio.h
#includeassert.h
#includestdlib.h
#includestdbool.htypedef int STDataType;
//动态开辟数组
typedef struct Stack
{STDataType* a;int top;//栈顶int capacity;//容量
}ST;void STInit(ST* ps);
void STDestroy(ST* ps);//栈顶
void STPush(ST* ps, STDataType x);
void STPop(ST* ps);
STDataType STTop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps); #define _CRT_SECURE_NO_WARNINGS
#includecode.4.5.stack.h
void STInit(ST* ps) {assert(ps);ps-a NULL;ps-top ps-capacity 0;
}void STDestroy(ST* ps) {assert(ps);free(ps-a);ps-a NULL;ps-capacity ps-top 0;
}void STPush(ST* ps, STDataType x) {assert(ps);//满了进行扩容if (ps-top ps-capacity) {int newcapacity ps-capacity 0 ? 4 : ps-capacity * 2;STDataType* tmp (STDataType*)realloc(ps-a,newcapacity*sizeof(STDataType));if (tmp NULL) {perror(realloc fail);return;}ps-a tmp;ps-capacity newcapacity;}ps-a[ps-top] x;ps-top;
}void STPop(ST* ps)
{assert(ps);assert(!STEmpty(ps));ps-top--;
}STDataType STTop(ST* ps) {assert(ps);assert(!STEmpty(ps));return ps-a[ps-top - 1];
}int STSize(ST* ps) {assert(ps);return ps-top;
}bool STEmpty(ST* ps)
{assert(ps);return ps-top 0;
}
#define _CRT_SECURE_NO_WARNINGS
#includecode.4.5.stack.h
int main() {ST s;STInit(s);STPush(s,1);STPush(s,2);STPush(s,3);int top STTop(s);printf(%d, top);STDestroy(s);return 0;
}