当前位置: 首页 > news >正文

网站建设发帖论坛社区拉新app推广平台

网站建设发帖论坛社区,拉新app推广平台,中央人民政府网站,高端画册设计个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 目录所有接口函数栈的初始化在栈顶放数据释放数据删除数据取栈顶的数据判断栈取区是否为…

个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【数据结构初阶(C实现)】
在这里插入图片描述

目录

  • 所有接口函数
  • 栈的初始化
  • 在栈顶放数据
  • 释放数据
  • 删除数据
  • 取栈顶的数据
  • 判断栈取区是否为空
  • 栈区数据的个数
  • 运行
  • 总代码
    • test.c
    • Stack.c
    • Stack.h

所有接口函数

void StackInit(ST* ps);//栈的初始化
void StackDestroy(ST* ps);//销毁栈
void StackPush(ST* ps,STDataType x);//取栈顶的数据
void StackPop(ST* ps);
STDataType StackTop(ST* ps);//取栈顶的数据
int StackSize(ST* ps);
bool StackEmpty(ST* ps);//判断栈是否为空

栈的初始化

//初始化
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;

这里需要注意的是ps->top初始化成0或者-1是有一些区别的。
当top初始化成0的时候(先放数据然后在ps->top++),意味着top指向的是栈顶数据的下一个;
当top初始化成-1的时候(先ps->top++,然后再放数据),意味着top指向栈顶数据。

总之,我们到底是先ps->top++,还是先放数据,都是可以的。

在栈顶放数据

void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->capacity == ps->top){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){printf("realloc fail\n");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}

释放数据

//销毁
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}

删除数据

在这里插入图片描述
这里还没有报错,所以当ps->top一直减减直到ps->top减到-1的时候,此时就会进行报错,因为此时已经没有东西可以删除了。
所以,这里我们最好加上**assert(ps->top>0);或者把这句话换为assert(!StackEmpty(ps));**当栈为空的时候,就会提示我们不要在进行数据的删除了。
在这里插入图片描述
当栈里面的数据为空时,此时如果我们还想删除数据,就会直接报错。

//删除数据
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}

取栈顶的数据

//取栈顶的数据
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}

判断栈取区是否为空

bool StackEmpty(ST* ps)
{assert(ps);//if (ps->top == 0)//{//	return true;//}//else//{//	return false;//}return ps->top == 0;
}

当栈为空的时候,即ps->top=0的时候,返回真,就代表栈为空的。

栈区数据的个数

int StackSize(ST* ps)
{assert(ps);return ps->top;
}

由于我们刚刚初始化的时候,ps->top初始化的为0,top指向的是栈顶的下一个。

运行

在这里插入图片描述
在这里插入图片描述

总代码

test.c

//数组栈的实现
#define _CRT_SECURE_NO_WARNINGS 1#include"Stack.h"void TestStack1()
{ST st;StackInit(&st);StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);StackPop(&st);StackPop(&st);StackPop(&st);StackPop(&st);StackPop(&st);//printf("%d\n", StackTop(&st));//StackDestroy(&st);
}void TestStack2()
{ST st;StackInit(&st);StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);printf("%d ", StackTop(&st));StackPop(&st);printf("%d ", StackTop(&st));StackPop(&st);StackPush(&st, 5);StackPush(&st, 6);while (!StackEmpty(&st)){printf("%d ", StackTop(&st));StackPop(&st);}StackDestroy(&st);
}int main()
{//TestStack1();TestStack2();return 0;
}

Stack.c

#pragma once
#include"Stack.h"//初始化
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;}//销毁
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->capacity == ps->top){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){printf("realloc fail\n");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}//删除数据
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}//取栈顶的数据
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}int StackSize(ST* ps)
{assert(ps);return ps->top;
}bool StackEmpty(ST* ps)
{assert(ps);//if (ps->top == 0)//{//	return true;//}//else//{//	return false;//}return ps->top == 0;
}

Stack.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps,STDataType x);
void StackPop(ST* ps);
STDataType StackTop(ST* ps);//取栈顶的数据
int StackSize(ST* ps);
bool StackEmpty(ST* ps);
http://www.jinmujx.cn/news/78923.html

相关文章:

  • 有什么兼职做设计的网站好营销策划公司
  • 中国企业公司网站建设枣庄网站建设制作
  • 手机网站建设yuseo搜索引擎优化步骤
  • 免费网站建站排行榜深圳百度seo代理
  • 怎么做动态网站jsp免费拓客软件
  • wordpress go跳转免费seo关键词优化服务
  • 海南微信网站制作平台网络推广的优势
  • 如何修改wordpress登录域名优化关键词技巧
  • 邓亚萍近况 做网站败光20亿nba最新排名榜
  • 网站方案书山东企业网站建设
  • 网站制作公司备案通州区网站快速排名方案
  • wordpress插件css论坛seo网站
  • 小微宝安网站建设网络营销学什么内容
  • 找人做一个网站要多少钱阿里云盘资源搜索引擎
  • 苏州沧浪区做网站的跨境电商seo是什么意思
  • ps做的网站首页站长工具网站
  • 盐城网站优化工作室整合营销传播策略
  • 上海外贸公司集中在哪些地方百度seo霸屏软件
  • 网站越来越难做搜索引擎优化包括
  • 南网站建设 首选搜点网络怎么做网站卖产品
  • 设计产品网站seo主要是做什么的
  • 网站里的搜索怎么做的今日头条新闻最新消息
  • 日本樱花云服务器免费网站雅昌最大免费广告发布平台
  • 深圳 网站建设国家中医药管理局
  • 网站改版灵感库淘宝美工培训
  • 重庆网站建设 cqhtwl深圳网络营销的公司哪家好
  • 建设网站公司名称大全巨量算数官方入口
  • 网站分享插件怎么做seo能干一辈子吗
  • 深圳工作服制作滁州网站seo
  • 长宁做网站公司手机制作网站app