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

北京vi设计公司 四方之志浑江区关键词seo排名优化

北京vi设计公司 四方之志,浑江区关键词seo排名优化,咖啡店网站建设模版,知名网站建设商家目录 1.栈1.1栈的概念及结构1.2 栈的实现1.1.0 栈的初始化1.1.1 销毁1.1.2 入栈1.1.3 出栈1.1.4 获取栈中有效元素个数1.1.5 检测栈是否为空,如果为空返回非零结果,如果不为空返回01.1.6 获取栈顶元素1.1.7 验证 附录 栈的C语言实现源码.h文件.c文件test…

目录

  • 1.栈
    • 1.1栈的概念及结构
    • 1.2 栈的实现
      • 1.1.0 栈的初始化
      • 1.1.1 销毁
      • 1.1.2 入栈
      • 1.1.3 出栈
      • 1.1.4 获取栈中有效元素个数
      • 1.1.5 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
      • 1.1.6 获取栈顶元素
      • 1.1.7 验证
  • 附录 栈的C语言实现源码
    • .h文件
    • .c文件
    • test.c文件

1.栈

1.1栈的概念及结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

  • 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
  • 出栈:栈的删除操作叫做出栈。出数据也在栈顶

在这里插入图片描述

1.2 栈的实现

在VS2022中新建一个工程

  • stack20250308.h(栈的类型定义、接口函数声明、引用的头文件)
  • stack20250308.c(栈的接口函数的实现)
  • stackTest20250308.c(主函数、测试各个接口功能)

在这里插入图片描述

  • 实现接口
// 支持动态增长的栈
typedef 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);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);

1.1.0 栈的初始化

在这里插入图片描述

// 初始化栈
void STInit(ST* ps)
{assert(ps);ps->a = (STDataType*)malloc(sizeof(STDataType)*4);if (ps->a == NULL){perror("STInit::malloc fail!");return;}ps->capacity = 4;ps->top = 0;//top是栈顶元素的下一个位置//ps->top =-1;//top是栈顶元素位置
}

1.1.1 销毁

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

1.1.2 入栈

// 入栈,插入
void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){STDataType* tem = (STDataType*)realloc(ps->a,sizeof(STDataType) * ps->capacity*2);//扩容当前的2倍if (ps->a == NULL){perror("STInit::relloc fail!");return;}ps->a = tem;ps->capacity *= 2; //修改容量}ps->a[ps->top] = x;ps->top++;
}

1.1.3 出栈

// 出栈,删除
void STPop(ST* ps){assert(ps);assert(!STEmpty(ps));//检查是否为空,为空就报错,ps->top--;//直接--,但是空栈的时候就不能继续--,所以在之前进行是否为空的检查。
}

1.1.4 获取栈中有效元素个数

//获取栈中有效元素个数
int STSize(ST* ps)
{assert(ps);//top就是sizereturn ps->top;
}

1.1.5 检测栈是否为空,如果为空返回非零结果,如果不为空返回0

//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

1.1.6 获取栈顶元素

//获取栈顶元素
STDataType STTop(ST* ps)
{assert(ps);return ps->a[ps->top - 1];//top是最后一个元素的下一个位置,所以-1
}

1.1.7 验证

  • 验证的时候,我们栈是不能打印的,我们需要一个一个出栈打印栈顶元素
void STTest()
{ST st;STInit(&st);STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);STPush(&st, 4);STPush(&st, 5);while (!STEmpty(&st)){printf("%d ", STTop(&st));STPop(&st);}STDestroy(&st);}

插入
在这里插入图片描述

删除
在这里插入图片描述

栈有效个数验证
在这里插入图片描述

附录 栈的C语言实现源码

.h文件

#pragma once
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<assert.h>//静态的
//#define N 10
//typedef struct Stack
//{
//	int a[N];
//	int top;
//
//}Stack;// 支持动态增长的栈
typedef 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);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);

.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"stack20250308.h"// 初始化栈
void STInit(ST* ps)
{assert(ps);ps->a = (STDataType*)malloc(sizeof(STDataType)*4);if (ps->a == NULL){perror("STInit::malloc fail!");return;}ps->capacity = 4;ps->top = 0;//top是栈顶元素的下一个位置//ps->top =-1;//top是栈顶元素位置
}//销毁
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}
// 入栈,插入
void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){STDataType* tem = (STDataType*)realloc(ps->a,sizeof(STDataType) * ps->capacity*2);//扩容当前的2倍if (ps->a == NULL){perror("STInit::relloc fail!");return;}ps->a = tem;ps->capacity *= 2; //修改容量}ps->a[ps->top] = x;ps->top++;
}
// 出栈,删除
void STPop(ST* ps){assert(ps);assert(!STEmpty(ps));//检查是否为空,为空就报错,ps->top--;//直接--,但是空栈的时候就不能继续--,所以在之前进行是否为空的检查。
}//获取栈中有效元素个数
int STSize(ST* ps)
{assert(ps);//top就是sizereturn ps->top;
}
//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
//获取栈顶元素
STDataType STTop(ST* ps)
{assert(ps);return ps->a[ps->top - 1];//top是最后一个元素的下一个位置,所以-1
}

test.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"stack20250308.h"void STTest()
{ST st;STInit(&st);STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);STPush(&st, 4);STPush(&st, 5);STPop(&st);STPop(&st);int size = STSize(&st);printf("栈有效元素为:%d\n", size);while (!STEmpty(&st)){printf("%d ", STTop(&st));STPop(&st);}STDestroy(&st);
}int main()
{STTest();return 0;
}
http://www.dtcms.com/wzjs/222700.html

相关文章:

  • java做网站好学么张家界seo
  • 广东装饰网站建设开一个免费网站
  • 做网站怎么找公司网页在线生成
  • 公司网站 钓鱼网站b站怎么推广自己的视频
  • 给公司做网站需要什么培训课程总结
  • 做网站最快多久企业营销型网站
  • 个人能否做网站百度官网推广平台
  • 北京石景山网站建设站长统计性宝app
  • 高青网站建设全网关键词搜索工具
  • 郑州网站建设搜q.479185700网络广告营销策划方案
  • 浙江省台州市做网站多少钱收录网站查询
  • 淄博做网站的公司都有哪些百度浏览器网站入口
  • 个人网站设计文字内容模板江西省水文监测中心
  • p2p网站建设应注意的问题百度退款客服电话
  • 四合一网站建设链爱生态怎么交易
  • 用什么软件做楼盘微网站市场宣传推广方案
  • 汉口网站建设 优帮云南宁seo推广
  • wordpress dux主题公司seo是什么职位
  • 帝国cms做网站怎样维护官方百度app下载安装
  • 做网站需要懂什么技术广州网络推广公司有哪些
  • 网站怎么自适应如何创建网站教程
  • 微信小程序开发常见问题360优化大师历史版本
  • 关于做ppt的网站有哪些内容吗十大最靠谱it培训机构
  • 旅游网站的建设的意义百度官网电话
  • 可以优化网络的软件班级优化大师
  • 海报设计图片简单seo优化入门教程
  • 城乡建设和住房建设部八大员重庆seo按天收费
  • 网站登录系统内部错误广州全网推广
  • 开封做网站seo和sem是什么
  • 网站开发 绩效考核企业网站推广有哪些