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

惠州做学校网站专业的制作网站开发公司

惠州做学校网站,专业的制作网站开发公司,建筑人才网 一建港航,做珠宝网站价格多少一、概念 栈是一种先进后出的数据结构。FILO(firt in late out) 逻辑结构:线性结构 二、存储结构: (一) 顺序存储 顺序栈 基于一个数组配合一个栈顶"指针(数组下标)–top" 顺序栈的本质就是对…

一、概念

栈是一种先进后出的数据结构。FILO(firt in late out)
逻辑结构:线性结构

二、存储结构:

(一) 顺序存储

顺序栈
基于一个数组配合一个栈顶"指针(数组下标)–top"
顺序栈的本质就是对顺序表操作的一种约束:只能在一端进行插入和删除。

操作:
创建
清空
销毁
入栈、压栈——判断栈满
出栈、弹栈——判断栈空
打印栈所有元素

(二)链式存储

1. 结构体定义

//链表节点结构体----数据元素
typedef struct _Node{int data;struct _Node *next;
}node_t;//链式栈的结构体----数据对象
typedef struct _Stack{node_t *top;int count;//记录栈中元素个数//.....其他属性信息
}stack_t;

2.创建栈表

(1)函数定义

int create_stack(stack_t **my_stack);

  1. 在内存中申请一块stack_t类型大小的空间存储栈的内容;
  2. 初始化栈的成员的数据:将count置0,top置NULL
(2)注意点
  1. 进入函数就需要判断传入的参数是否为NULL,为空退出函数
  2. 在申请完内存空间后判断,申请空间是否成功,失败退出函数
(3)代码实现
int create_stack(stack_t **my_stack){if(NULL==my_stack) //判断传入参数是否为空{return -1;}*my_stack=(stack_t *)malloc(sizeof(stack_t));if(NULL==*my_stack){return -1;}//初始化(*my_stack)->top=NULL;(*my_stack)->count=0;return 0;
}

3. 入栈

(1)函数定义

int push_stack(stack_t *my_stack, int data);

  1. 在内存中申请一块node_t类型大小的数据空间
  2. 进行头插
  3. count自加一
(2)注意点
  1. 需要检查传入参数是否为空,为空退出函数
  2. top指向的元素即是第一个数据节点
(3)代码实现
int push_stack(stack_t *my_stack, int data){if(NULL==my_stack){return -1;}//申请一个新数据节点node_t *node=(node_t *)malloc(sizeof(node_t));if(NULL==node){return -1;}node->next=my_stack->top;my_stack->top=node;node->data=data;my_stack->count++;return 0;
}

3. 出栈

(1)函数定义

int pop_stack(stack_t *my_stack, int *num);

  1. 头删
  2. count自减
(2)注意点
  1. 需要检查传入指针参数和*num是否为空,为空退出函数
  2. 检查栈是否为空,为空退出函数
(3)代码实现
//出栈
int pop_stack(stack_t *my_stack, int *num){if(NULL==my_stack||NULL==num){return -1;}if(is_empty(my_stack)){return -1;}//头删node_t *pdel=my_stack->top;*num=pdel->data;my_stack->top=pdel->next;free(pdel);pdel=NULL;my_stack->count--;return 0;
}

4. 判断栈是否为空

(1)函数定义

int is_empty(stack_t *my_stack);

(2)注意点
  1. 判断传入的指针参数是否为空
(3)代码实现
int is_empty(stack_t *my_stack){if(NULL==my_stack){return -1;}return (my_stack->count)?0:1; 
}

5. 清空栈

(1)函数定义

int clean_stack(stack_t *my_stack);

  1. 循环头删
  2. count置0
  3. 只要top的指向不为空,就一直循环
(2)注意点
  1. 入参合理性检查
  2. count不要忘记置0
(3)代码实现
int clean_stack(stack_t *my_stack){if(NULL==my_stack){return -1;}node_t *pdel=NULL;while(my_stack->top){pdel=my_stack->top;my_stack->top=pdel->next;free(pdel);}pdel=NULL;my_stack->count=0;return 0;
}

6. 销毁栈

(1)函数定义

int destroy_stack(stack_t **my_stack);

(2)注意点
(3)代码实现
int destroy_stack(stack_t **my_stack){if(NULL==my_stack||NULL==*my_stack){return -1;}//先清空再销毁if(clean_stack(*my_stack)){return -1;}free(*my_stack);*my_stack=NULL;return 0;
}

7. 打印栈

(1)函数定义

int print_stack(stack_t *my_stack);

(2)注意点
  1. 入参合理性检查
(3)代码实现
int print_stack(stack_t *my_stack){if(NULL==my_stack){return -1;}if(is_empty(my_stack)){printf("栈空\n");return -1;}node_t *ptemp=my_stack->top;for(int i=0;i<my_stack->count;i++){printf("%d ",ptemp->data);ptemp=ptemp->next;}putchar(10);return 0;
}
http://www.tj-hxxt.cn/news/31775.html

相关文章:

  • 龙岗网站建设szaow如何做好一个网站
  • 我想在阿里巴巴网站开店_怎么做品牌推广百度seo
  • 昆明经济技术开发区官方门户网站怎么创建网站免费建立个人网站
  • 76款wordpress付费主题密码seo优化排名推广
  • 网站建设费站长网站
  • 网站开发知乎产品市场调研怎么做
  • 周村网站建设yx718微信seo什么意思
  • 2003建网站青岛网站制作公司
  • 长沙百度网站推广百度一级代理商
  • 18+网站推广百度下载安装官方下载
  • 网站seo 文章转载 修改标题南京百度推广开户
  • 只做画册的网站搜索词和关键词
  • 中国特色社会主义为什么好专业的seo外包公司
  • 做地产网站哪家好北京seo招聘
  • 中国协会网站建设方案如何在百度推广自己的产品
  • 大连外贸网站制作友情链接平台广告
  • 海口市做网站的公司江苏网站推广公司
  • 网站流量监测网站注册地址
  • 深圳企业网站建设公司排名杭州云优化信息技术有限公司
  • 独立博客网站制作seo主要优化哪些
  • 如何做装修网站建网站哪个平台好
  • 做网站属于技术开发吗百度关键词优化排名
  • 推动政府门户网站建设项目网站
  • 秦皇岛做网站公司排名手机免费建网站
  • 设计网站banner图片北京百度快速优化排名
  • php网站商城源码东莞百度推广优化
  • 网站建设容易出现的问题网络推广的细节
  • 织梦网站建设竞价推广开户
  • 济南网站制作创意百度广告电话号码是多少
  • 网站做推荐链接端口抚顺优化seo