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

东莞阳光网站太原优化排名推广

东莞阳光网站,太原优化排名推广,成都建网站,大连网络备案做网站目录 栈(Stack)栈顶(top)栈底(bottom)空栈(不含任何元素) 创建栈 入栈操作 出栈操作 销毁一个栈 计算栈的当前容量 实例分析 栈的插入操作叫做进栈(Push&#xf…

目录

栈(Stack)栈顶(top)栈底(bottom)空栈(不含任何元素)

创建栈 

入栈操作

出栈操作

销毁一个栈

计算栈的当前容量

实例分析


栈的插入操作叫做进栈(Push),或者称为压栈、入栈。

栈的删除操作叫做出栈(Pop),或者称为弹栈。

栈又称为先进后出(last in first out)的后进先出原则,称为后进先出的线性表(LIFO)。 

栈的本质上也是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构

最开始栈中不含有任何数据,叫做空栈,此时栈定就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时,从栈顶移出,栈顶下一,整个栈的当前容量变小。

栈的顺序存储结构:

typedef struct 
{ElemType *base;ElemType *top;int stacksize;}sqStack;

 这里定义了一个顺序存储的栈,它包含了三个元素:base,top,stacksize。其中base是指向栈底的指针变量,top是指向栈顶的指针变量,stacksize指示栈的当前可使用的最大容量。

创建栈 

#define STACK_INIT_SIZE 100 initStack(sqStack *s)//创建栈 
{s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if(!s->base)exit(0);s->top=s->base;		//最开始,栈顶就是栈底。 s->stacksize = STACK_INIT_SIZE;} 

入栈操作

#include <stdlib.h>
#define STACKINCREMENT 10Push(sqStack *s,ElemType e)		//入栈操作 
{if(s->top - s->base >= s->stacksize){//如果漫展,追加空间 s->base = (ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));if(!s->base)exit(0);s->top=s->base + s->stacksize;s->stacksize = s->stacksize + STACKINCREMENT;}*(s-top)=e;s->top++; } 

出栈操作

出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。

每当从栈内弹出一个数据,栈的当前容量就-1.

Pop(sqStack *s,ElemType *e)
{if(s->top==s->base)//栈已空return;*e=*--(s->top); 
}

销毁一个栈

DestrogStack(sqStack *s)
{int i,len;len = s->stackSize;for(i=0;i<len;i++){free(s->base);s->base++;}s->base = s->top =NULL;s->stacksize = 0;
}

计算栈的当前容量

计算栈的当前容量也就是计算栈中元素的个数,因此只要返回s.top-s.base 即可。

栈的最大容量是指该栈占据内存空间的大小,其值是s.stackSzie,它与栈的当前容量不是一个概念。

int StackLen(sqStack s)
{return (s.top-s.base+1);
}

实例分析

利用栈的数据结构特点,将二进制转换为十进制数。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10typedef char ElemType;
typedef struct
{ElemType *base;ElemType *top;int stackSize; }sqStack;void InitStack(sqStack *s)
{s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if(!s->base)exit(0);s->top = s->base;s->stackSize=STACK_INIT_SIZE;
}void Push(sqStack *s,ElemType e)
{if(s->top - s->base>= s->stackSize){s->base=(ElemType *)realloc(s->base,(s->stackSize+STACKINCREMENT) * sizeof(ElemType));if(!s->base){exit(0);}}*(s->top)=e;s->top++;} void Pop(sqStack *s,ElemType *e)
{if(s->top==s->base){return;}*e = *--(s->top);
}int StackLen(sqStack s)
{return (s.top- s.base);
}int main(void)
{ElemType c;sqStack s;int len ,i,sum=0;InitStack(&s);printf("请输入二进制数,输入#符号表示结束!");scanf("%c",&c);while(c!='#'){Push(&s,c);scanf("%c",&c);}getchar();len = StackLen(s);printf("栈的当前容量是:%d\n",len);for(i=0;i<len;i++){Pop(&s,&c);sum=sum+(c-48)*pow(2,i);}printf("%d",sum);return 0;
}

http://www.bjxfkj.com.cn/article/107404.html

相关文章:

  • 刷单网站建设济南市新闻最新消息
  • 国际物流网站网店代运营哪个好
  • 平湖专业网站制作培训机构需要哪些证件
  • 小程序注册教程上海排名优化seobwyseo
  • 新闻网站的编辑该怎么做线上宣传方式
  • 第三方客服外包公司佛山seo网站排名
  • 有做软件的网站有哪些百度关键词优化策略
  • 北京网站托管的公司长沙 建站优化
  • 靠比较好的软件下载网站制作网页完整步骤
  • 网站推广怎么做优化潮州网络推广
  • 做外贸网站的好处媒体发布平台
  • 溧阳做网站东莞建设企业网站
  • 网站建设信息收集长春网站制作计划
  • 建立网站的公司平台电商网站建设定制
  • 外贸平台网站建设广西网络优化seo
  • 潍坊网站做的好的公司2022拉新推广赚钱的app
  • 寿光营销型网站建设seo关键词推广渠道
  • 移动网站怎么登录seo线下培训班
  • 网站设计素材包seo最新
  • 无锡市网站上海优化公司
  • 做网站前端需要自写css么网络热词英语
  • 中山 环保 骏域网站建设专家百度我的订单
  • 建设网站广州十大短视频平台排行榜
  • 公司网站建设的签订合同深圳营销策划公司十强
  • wordpress 归档函数快手seo
  • 湖南网站推广营销设计百度一下官方网
  • 博客类网站源码企业网站优化工具
  • dz做美女网站平板电视seo优化关键词
  • 快速做网站详情页网站建设公司排行榜
  • 帮人代做静态网站多少钱泰州seo外包公司