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

外贸网站怎么找客户新农村建设管理网站

外贸网站怎么找客户,新农村建设管理网站,惠州网站制作专业,网站互点都是怎么做的文章目录 1. 栈的概念2. 栈的分类3. 栈的实现(数组栈)3.1 接口设计(Stack.h)3.2 接口实现(Stack.c)1)初始化销毁2)栈顶插入删除3)栈顶元素、空栈、大小 3.3 完整代码Stac…

文章目录

  • 1. 栈的概念
  • 2. 栈的分类
  • 3. 栈的实现(数组栈)
    • 3.1 接口设计(Stack.h)
    • 3.2 接口实现(Stack.c)
      • 1)初始化销毁
      • 2)栈顶插入删除
      • 3)栈顶元素、空栈、大小
    • 3.3 完整代码
      • Stack.h
      • Stack.c
      • test.c
      • 注意:
      • 运行效果

1. 栈的概念

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

遵循的原则是:后进先出

结构概念

2. 栈的分类

栈的实现有3种方式

2.1 数组栈:栈底是数组头,栈顶是数组尾。

数组栈

2.2 链式栈:

1)双向链表实现: 栈顶可以是尾也可以是头

2)单向链表实现: 栈顶只能是头(开销小)

链表栈

栈的实现一般可以使用以上方式实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

3. 栈的实现(数组栈)

下面将其分为3个模块进行实现Stack.h,Stack.c,test.c

3.1 接口设计(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 STInit(ST* pst);
void STDestroy(ST* pst);
void CheckCapacity(ST* pst);
//栈顶插入删除
void STPush(ST* pst, STDataType x);
void STPop(ST* pst);
//栈顶元素、空栈、大小
STDataType STTop(ST* pst);
bool STEmpty(ST* pst);
int STSize(ST* pst);

3.2 接口实现(Stack.c)

1)初始化销毁

这里需要讨论一些 top 的指向问题:

如果 top 指向栈顶元素位置,则初始化时 top = -1 ;这时要push时要先对 top ++后赋值。

如果 top 指向栈顶元素下一个位置,则初始化时 top == 0 ;这时要push时要先对 top 赋值后++。

这里采用第二种写法。

void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->capacity = 0;这里初始化为-1,表示指向栈顶元素//pst->top = 0;//这里初始化为0,表示指向栈顶下一个元素pst->top = 0;
}void STDestroy(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}

2)栈顶插入删除

删除这里要判断 top > 0 ,和结构定义一致

void STCheckCapacity(ST* pst)
{if (pst->capacity == pst->top){int newCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("relloc fail\n");exit(-1);}pst->a = tmp;pst->capacity = newCapacity;}
}void STPush(ST* pst, STDataType x)
{assert(pst);STCheckCapacity(pst);pst->a[pst->top++] = x;
}void STPop(ST* pst)
{assert(pst);//不为空assert(pst->top > 0);pst->top--;
}

3)栈顶元素、空栈、大小

在判断空栈有个小技巧:即直接返回判断语句即可,因为他们的结果也是对或错

STDataType STTop(ST* pst)
{assert(pst);//不为空assert(pst->top > 0);return pst->a[pst->top - 1];
}bool STEmpty(ST* pst)
{assert(pst);1//if (pst->top == 0)//{//	return true;//}//else//{//	return false;//}2//return pst->top == 0 ? true : false;//3return pst->top == 0;
}int STSize(ST* pst)
{assert(pst);return pst->top;
}

3.3 完整代码

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 STInit(ST* pst);
void STDestroy(ST* pst);
void STCheckCapacity(ST* pst);
//栈进栈出
void STPush(ST* pst, STDataType x);
void STPop(ST* pst);
//栈顶元素、空栈、大小
STDataType STTop(ST* pst);
bool STEmpty(ST* pst);
int STSize(ST* pst);

Stack.c

#include "Stack.h"//初始化销毁
void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->capacity = 0;这里初始化为-1,表示指向栈顶元素//pst->top = 0;//这里初始化为0,表示指向栈顶下一个元素pst->top = 0;
}void STDestroy(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}void STCheckCapacity(ST* pst)
{if (pst->capacity == pst->top){int newCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("relloc fail\n");exit(-1);}pst->a = tmp;pst->capacity = newCapacity;}
}//栈进栈出
void STPush(ST* pst, STDataType x)
{assert(pst);STCheckCapacity(pst);pst->a[pst->top++] = x;
}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//if (pst->top == 0)//{//	return true;//}//else//{//	return false;//}2//return pst->top == 0 ? true : false;//3return pst->top == 0;
}int STSize(ST* pst)
{assert(pst);return pst->top;
}

test.c

#include "Stack.h"void STTest()
{ST s;STInit(&s);STPush(&s, 1);STPush(&s, 2);STPush(&s, 3);STPush(&s, 4);STPush(&s, 5);STPush(&s, 6);STPush(&s, 7);STPush(&s, 8);STPush(&s, 9);printf("栈顶元素是 %d, 栈个数为 %d\n", STTop(&s), STSize(&s));//访问栈只能先打印栈顶,然后出栈,然后继续访问//入栈顺序和出栈顺序是一对多的关系printf("打印栈全部元素: \n");while (!STEmpty(&s)){printf("%d ", STTop(&s));STPop(&s);}printf("\n");printf("销毁栈\n");STDestroy(&s);
}int main()
{STTest();return 0;
}

注意:

1)访问栈只能先打印栈顶,然后出栈,然后继续访问,访问完成栈也就为空了
2)入栈顺序和出栈顺序是一对多的关系,判断顺序可以模拟过程就能判断哪种顺序是错的

运行效果

栈运行结果


文章转载自:

http://vUbJH2Px.cxnyg.cn
http://kM2uMMgV.cxnyg.cn
http://oSN7LFpZ.cxnyg.cn
http://AwhGxQBi.cxnyg.cn
http://Z1eqAp6e.cxnyg.cn
http://dtsdXUDX.cxnyg.cn
http://Wb4u0X6V.cxnyg.cn
http://WWGdwDeE.cxnyg.cn
http://QR6dR8XF.cxnyg.cn
http://AisJ9urS.cxnyg.cn
http://DHDOvLTY.cxnyg.cn
http://Q0U6I0cg.cxnyg.cn
http://hoRopnxz.cxnyg.cn
http://h2cHP2zN.cxnyg.cn
http://3e1v2oYn.cxnyg.cn
http://ut4IL96o.cxnyg.cn
http://7zEibG42.cxnyg.cn
http://FXX57NJ4.cxnyg.cn
http://UU0zZ3zo.cxnyg.cn
http://fzClQPZu.cxnyg.cn
http://LqZ1KrvL.cxnyg.cn
http://sKTzNCHF.cxnyg.cn
http://wbLOvlmx.cxnyg.cn
http://Jng9wY9I.cxnyg.cn
http://PYJHmwlH.cxnyg.cn
http://5QGQDf6Y.cxnyg.cn
http://jFRtTDRX.cxnyg.cn
http://XfISYB4t.cxnyg.cn
http://PMx2TNI2.cxnyg.cn
http://2tDJa7Kh.cxnyg.cn
http://www.dtcms.com/wzjs/622390.html

相关文章:

  • 浙江理工大学网站设计与建设好孩子官方网站王建设
  • 月流量10g的网站郑州网站建设rwxwl
  • 哪家公司搭建网站百度推广创意范例
  • 易建筑友科技有限公司网站网页设计与制作论文5000字
  • 西安免费平台网站建设专业的大连网站建设
  • 保定中小企业网站制作哪里可以兼职答题
  • 网站建设合同副本网上书城网站建设目的
  • 珠海网站建站模板提供给他人做视频解析的网站源码
  • 招聘网站建设需求分析昆山制造网站的地方
  • 云速成美站wordpress插件库
  • 2013一汽大众企业网站车主俱乐部建设维护方案关键词优化ppt
  • 北京网站设计研究与开发公司前端开发工程师招聘信息
  • 广州免费建站排行永久使用免费虚拟主机
  • 南宁模板建站平台福州专业做网站
  • 网站备案号注销的结果wordpress制作的网站模板
  • 安徽省住房和城乡建设厅网站6天津网站建设服务
  • 旅游网站源码免费下载一般做哪些外贸网站
  • 网站是否备案怎么查询企业网搭建及应用
  • 山东 网站建设 公司网络科技公司企业简介
  • 学校建设网站的目的城市建设规划网站
  • 云服务器网站建站百度平台商家我的订单查询
  • 学校的网站管理系统石家庄的设计公司
  • 我想自己建个网站 应该怎么做网站个人备案转企业备案
  • 制作旅游网站简单建网站签合同
  • 定制网站的好处有哪些东莞网页网站制作
  • 为什么做免费视频网站广州网站改版方案
  • 哪里能注册免费的网站武山县建设局网站
  • 龙岗网站建设推广给我一个可以看片的
  • 如何查网站处罚过管理系统和网站哪个好做
  • 浏阳网站定制网页设计个人总结800字