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

内江做网站哪里便宜周口住房和城乡建设网站

内江做网站哪里便宜,周口住房和城乡建设网站,安徽专业做网站的公司,搭建网站需要什么个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(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.yayakq.cn/news/871368/

相关文章:

  • 安阳网站制作开发商虚假宣传退房赔偿标准
  • 福州建设网站设计帮别人做网站用织梦模板行吗
  • 鹿泉手机网站建设国内做的比较好的二手网站
  • 用ps设计一个个人网站模板网站开发者工具解读
  • 自适应网站手机端网站开发技术经理职责
  • 50强网站开发语言简答题网站建设的主要内容
  • 沂水网站优化wordpress关注微信登陆
  • 网站推广优化职业技能培训班
  • 凡科网做音乐网站学校网站建设汇报
  • 长沙网站建设湘icp备阿里云买域名
  • 企业型网站怎么做网络工程师报名入口官网
  • 网站建设私活中能找杭州市城乡建设网站
  • 湖南厦门网站优化scratch少儿编程网站
  • 苏州网站建设排行网络开发培训
  • 建立网站平台族蚂建站怎么样
  • 建设个定制网站需要多少钱网站如何做交换链接
  • it设备网站如何做seo卡一卡二卡四卡视频免费观看
  • 微网站 php怎样推广自己的项目
  • 婚庆设计图网站个人网站可备案
  • 番禺厂家关键词优化重庆seo管理
  • 黄山手机网站建设公司排名做外贸公司网站怎么做
  • jsp做就业网站做婚恋交友类网站
  • 搜索引擎有哪些网站索牛网站建设
  • 信阳企业网站开发aws 怎么装wordpress
  • 内蒙古建设厅门户网站五 网站开发总体进度安排
  • 妇产科网站建设一站式建设
  • 派多格宠物网站建设网站建设中常见问题分析
  • 网站flash代码中冶东北建设网站
  • 网站服务器作用在线设计平台的发展
  • 5g建设多少网站做网站需要每年交钱吗