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

苗木推广做哪个网站好神木网站建设

苗木推广做哪个网站好,神木网站建设,南阳网站排名优化价格,兰州网站建设网站建设栈 1. 基本概念 栈是一种逻辑结构#xff0c;是特殊的线性表。特殊在#xff1a; 只能在固定的一端操作 只要满足上述条件#xff0c;那么这种特殊的线性表就会呈现一种“后进先出”的逻辑#xff0c;这种逻辑就被称为栈。栈 在生活中到处可见#xff0c;比如堆叠的盘子…栈 1. 基本概念 栈是一种逻辑结构是特殊的线性表。特殊在 只能在固定的一端操作 只要满足上述条件那么这种特殊的线性表就会呈现一种“后进先出”的逻辑这种逻辑就被称为栈。栈 在生活中到处可见比如堆叠的盘子、电梯中的人们、嵌套函数的参数等等。 由于约定了只能在线性表固定的一端进行操作于是给栈这种特殊的线性表的“插入”、“删除”另起了 下面这些特定的名称 栈顶可以进行插入删除的一端 栈底栈顶的对端 入栈将节点插入栈顶之上也称为压栈函数名通常为push() 出栈将节点从栈顶剔除也称为弹栈函数名通常为pop() 取栈顶取得栈顶元素但不出栈函数名通常为top( 基于这种固定一端操作的简单约定栈获得了“后进先出”的基本特性如下图所示最后一个放入的元 素最先被拿出来 2. 存储形式 栈只是一种数据逻辑如何将数据存储于内存则是另一回事。一般而言可以采用顺序存储形成顺序 栈或采用链式存储形成链式栈。 顺序栈 顺序存储意味着开辟一块连续的内存来存储数据节点一般而言管理栈数据除了需要一块连续的 内存之外还需要记录栈的总容量、当前栈的元素个数、当前栈顶元素位置如果有多线程还需要 配互斥锁和信号量等信息为了便于管理通常将这些信息统一于在一个管理结构体之中 // 顺序栈节点 struct seqStack { datatype *data; // 顺序栈入口 int size; // 顺序栈总容量 int top; // 顺序栈栈顶元素下标 };链式栈 链式栈的组织形式与链表无异只不过插入删除被约束在固定的一端。为了便于操作通常也会创 建所谓管理结构体用来存储栈顶指针、栈元素个数等信息 // 链式栈节点 typedef struct node { datatype data; struct node *next; }node; // 链式栈管理结构体 struct linkStack { node *top; // 链式栈栈顶指针 int size; // 链式栈当前元素个数 };3. 基本操作  不管是顺序栈链式栈栈的操作逻辑都是一样的但由于存储形式不同代码的实现是不同的。下 面分别将顺序栈和链式栈的基本核心操作罗列出来 顺序栈 sstack.h #ifndef __SSTACK_H #define __SSTACK_H // 数据类型 typedef int DATA; // 顺序栈结构体 typedef struct { DATA *pData; // 栈中元素的地址 int size; // 栈的总容量 int top; // 栈顶元素下标 }SeqStack; // 初始化栈 int SStack_init(SeqStack *s, int num); // 判断栈是否已满 int SStack_isfull(SeqStack *st); // 判断栈是否为空 int SStack_isempty(SeqStack *st); // 入栈/压栈 int SStack_push(SeqStack *st,DATA data); // 出栈/弹栈 int SStack_pop(SeqStack *st,DATA *data); // 回收栈 int SStack_free(SeqStack *st); #endifsstack.c #include stdlib.h #include sstack.h // 初始化栈 int SStack_init(SeqStack* s,int num) { s - pData (DATA*)calloc(sizeof(DATA),num); if(s - pData NULL) return -1; s - size num ; s - top -1; return 0; } // 判断栈是否已满 int SStack_isfull(SeqStack *st) { return st - top 1 st - size; } // 判断栈是否为空 int SStack_isempty(SeqStack *st) { return st - top -1; } // 压栈/入栈 int SStack_push(SeqStack *st,DATA data) { if(SStack_isfull(st)) return -1; st - top; st - pData[st - top] data; return 0; } // 出栈/弹栈 int SStack_pop(SeqStack *st,DATA *data) { if(SStack_isempty(st)) return -1; *data st - pData[st - top]; st - top--; return 0; } // 回收栈 int SStack_free(SeqStack *st) { if(st - pData) { free(st-pData); st - pData NULL; } st - top -1; } sstack_main.c #include sstack.h #include stdio.h int main(void) { SeqStack st; SStack_init(st,10); register int i 1; for(; i 10; i) SStack_push(st,i); if(-1 SStack_push(st,1024)) fprintf(stderr,满栈,插入失败\n); while(!SStack_isempty(st)) { DATA data 0; SStack_pop(st,data); printf(%4d,data); } printf(\n); SStack_free(st); return 0; }链式栈 inkstack.h #ifndef __LINKSTACK_H #define __LINKSTACK_H // 数据类型 typedef int DATA; // 链式栈节点 typedef struct _node { DATA data; // 数据 struct _node *next; // 指向下一个栈的节点 }NODE; // 链式栈管理结构体 typedef struct { NODE *pHead;// 链式栈栈顶指针 int size; // 链式栈当前元素个数 int num; }LinkStack; // 初始化链式栈 int LStack_init(LinkStack *s, int num); // 判断栈是否已满 int LStack_isfull(LinkStack *st); // 判断栈是否为空 int LStack_isempty(LinkStack *st); // 压栈/入栈 int LStack_push(LinkStack *st,DATA data); // 弹栈/出栈 int LStack_pop(LinkStack *st,DATA *data); // 回收栈 int LStack_free(LinkStack *st); #endif linkstack.c #include linkstack.h #include stdio.h #include stdlib.h // 初始化栈 int LStack_init(LinkStack *st, int num) { st - pHead NULL; st - size num; st - num 0; return 0 ; } // 判断栈是否已满 int LStack_isfull(LinkStack *st) { return st - num st - size; } // 判断栈是否为空 int LStack_isempty(LinkStack *st) { return st - num 0; } // 入栈 int LStack_push(LinkStack *st,DATA data) { if(LStack_isfull(st)) return -1; NODE* p (NODE*)malloc(sizeof(NODE)); if(!p) return -1; p - data data; p - next st - pHead; st - pHead p; (st - num); return 0; } // 出栈 int LStack_pop(LinkStack *st,DATA *data) { if(LStack_isempty(st)) return -1; NODE* p st - pHead; if(!p) return -1; *data p - data; st - pHead p - next; free(p); (st - num)--; return 0; } // 回收栈 int LStack_free(LinkStack *st) { NODE* p st - pHead, *q NULL; while(p) { q p; p p - next; free(q); } st - pHead NULL; st - num 0; return 0; }linkstack_main.c #include linkstack.h #include stdio.h int main(void) { LinkStack st; LStack_init(st,10); register int i 1; for(; i 10; i) LStack_push(st,i); if(-1 LStack_push(st,1024)) fprintf(stderr,满栈,插入失败\n); while(!LStack_isempty(st)) { DATA data 0; LStack_pop(st,data); printf(%4d,data); } printf(\n); LStack_free(st); return 0; } 使用链式栈实现十进制转八进制键盘输入一个十进制数经过链式栈的相关算法输出八进制 数。
http://www.dnsts.com.cn/news/68725.html

相关文章:

  • 厦门外贸网站建设 之家股票交易网站建设
  • 浙江 网站建设wordpress高阶教程
  • 国外企业合作的网站seo搜索推广费用多少
  • 广州新塘网站建设推广公司网站后台的验证码
  • 手机app开发环境搭建陕西seo
  • 建设小说网站用什么软件下载一个空间只能放一个网站吗
  • 在线优化网站建设网站开发的硬件环境是什么
  • 不停弹窗的网站怎么做福田网站建设罗湖网站建设
  • 好的文案网站届毕业设计代做网站
  • wordpress git page小红书seo是什么意思
  • php自建网站苏州网页设计app
  • 专业外贸网站制作erp系统哪个好
  • 校园网站建设整改建议网站代码图片
  • 网站新闻列表页面代码手机app ui界面设计
  • 织梦手机网站模板删除做网站实现图片自动压缩
  • 做卡盟网站麻涌网站建设制作多少钱
  • 欧洲手表网站领动做的网站怎么样
  • 平度做网站推广惠州百优做网站小程序熊掌号
  • 创建网站需要哪些步骤典型的电子商务网站
  • 汕头企业免费建站学院网站建设的现状分析
  • 重庆智能网站建设费用四川手机网上营业厅
  • 网站内容分析产品设计个人作品集
  • 电子商城建设做seo怎么设计网站
  • 网站的一般制作流程网站合同
  • 做像58这种分类信息网站赚钱吗云南网站开发公司推荐
  • 做网站的三个软件网站建设公司愿景
  • 网站建设主要业务流程设定怎样做网贷网站
  • 长沙网站开发推荐学室内设计需要什么条件
  • 做网站 深圳网站服务器环境搭建
  • app网站开发后台处理百度搜索关键词排行榜