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

光山县住房和城乡建设局网站成都正规搜索引擎优化

光山县住房和城乡建设局网站,成都正规搜索引擎优化,程序_做彩票源码网站开发,杨浦网站建设公司目录 前言 链式栈 操作方式 1.存储结构 2.初始化 3.创建节点 4.判断是否满栈 5.判断是否空栈 6.入栈 7.出栈 8.获取栈顶元素 9.遍历栈 10.清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈…

目录

前言

链式栈

操作方式 

1.存储结构

2.初始化

 3.创建节点

 4.判断是否满栈

 5.判断是否空栈

 6.入栈

 7.出栈

8.获取栈顶元素

 9.遍历栈

 10.清空栈

完整代码


前言

        前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈的初始化、建立、入栈、出栈、遍历、清空等操作)_灰勒塔德的博客-CSDN博客)那么今天我们就开始学习新的结构栈---链式栈,顾名思义就是通过链表的结构来实现栈的相关方法操作,包括创建、判断空满、出栈、入栈、遍历和清空等操作,下面就一起来看看吧!

链式栈

图示如下:

操作方式 

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 20 //设置最大节点数量create_node(ElemType data);//创建节点stack_init(Stack* top);//初始化isFull(Stack* top);//判断是否满栈isEmpty(Stack* top);//判断是否空栈push(Stack* top, ElemType data);//入栈pop(Stack* top);//入栈get_stacktop(Stack* top);//获取栈顶元素show_stack(Stack* top);//遍历栈clear_stack(Stack* top);//清空栈

1.存储结构

今天实现的是栈的链式储存,也就是俗称“链栈”。由于之前实现过单链表,对于栈的链式存储,二者原理是一样的,只不过在操作上链栈是受限的——仅能在栈顶进行插入和删除!话不多说,先看链栈的存储结构

//数据类型
typedef struct datatype {int age;char name[10];int num;
}ElemType;
//节点
typedef struct node {ElemType data;struct node* next;
}Node;
//栈顶指示
typedef struct stack {int count;	//计数Node* point;
}Stack;

2.初始化

初始化就让头指针指向的位置为NULL,节点计数为0

//初始化
void stack_init(Stack* top) {top->count = 0;top->point = NULL;
}

 3.创建节点

创建节点就通过链表的方式去创建节点,然后把数据值赋予给这个节点

//创建节点
Node* create_node(ElemType data) {Node* new_node = (Node*)malloc(sizeof(Node));if (new_node) {new_node->data = data;new_node->next = NULL;return new_node;}else{printf("ERROR\n");}
}

 4.判断是否满栈

判断是否满栈只需要看此时计数是否达到最大容量节点数量即可

//判断是否满
int isFull(Stack* top) {if (top->count > Maxsize) {printf("The stack is full\n");return 1;}return 0;
}

 5.判断是否空栈

这时候只需要看计数是否为0就行了

//判断是否为空
int isEmpty(Stack* top) {if (top->count == 0) {printf("The stack is empty\n");return 1;}return 0;
}

 6.入栈

进行入栈的操作类似于链表的成链操作,也就是说把创建好的节点连起来即可,不同的是此时每放入一个节点的时候,栈顶指针top要往栈顶依次往上移动,计数也要+1,代码如下所示:

//入栈
void push(Stack* top, ElemType data) {Node* new_node = create_node(data);if (new_node&&!isFull(top)) {top->count++;if (top->count == 1) {//如果入栈是第一个节点的话top->point = new_node;}else{//以下两个步骤不能调过来!new_node->next = top->point;top->point = new_node;}}elsereturn;
}

 7.出栈

出栈时,先获取到此时栈顶指针指向的位置pop_node,再把栈顶指针向下移动一位,计数减一,然后返回这个元素pop_node即可:

//出栈
Node* pop(Stack* top) {Node* pop_node=NULL;if (!isEmpty(top)) {pop_node = top->point;top->point = pop_node->next;pop_node->next = NULL;top->count--;}return pop_node;
}

8.获取栈顶元素

获取栈顶元素不需要出栈,只需要返回栈顶元素即可: 

//获取栈顶元素
Node* get_stacktop(Stack* top) {return top->point;
}

 9.遍历栈

遍历栈,从栈顶开始,依次往下遍历输出数据即可:

//遍历栈
void show_stack(Stack* top) {Node* cur = top->point;while (cur) {printf("%d %s %d\n", cur->data.age, cur->data.name, cur->data.num);cur = cur->next;}printf("Print over!\n");
}

 10.清空栈

清空栈,就要去依次把每一个节点的空间给释放掉,然后栈顶往下移动,直到移动到最初始的位置。

//清空栈
void clear_stack(Stack* top) {Node* cur;while (top->point) {cur = top->point;top->point = cur->next;free(cur);}printf("Clear successfully!\n");
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 20 //设置最大节点数量//链表栈//数据类型
typedef struct datatype {int age;char name[10];int num;
}ElemType;
//节点
typedef struct node {ElemType data;struct node* next;
}Node;
//栈顶指示
typedef struct stack {int count;	//计数Node* point;
}Stack;//创建节点
Node* create_node(ElemType data) {Node* new_node = (Node*)malloc(sizeof(Node));if (new_node) {new_node->data = data;new_node->next = NULL;return new_node;}else{printf("ERROR\n");}
}//初始化
void stack_init(Stack* top) {top->count = 0;top->point = NULL;
}//判断是否满
int isFull(Stack* top) {if (top->count > Maxsize) {printf("The stack is full\n");return 1;}return 0;
}
//判断是否为空
int isEmpty(Stack* top) {if (top->count == 0) {printf("The stack is empty\n");return 1;}return 0;
}//入栈
void push(Stack* top, ElemType data) {Node* new_node = create_node(data);if (new_node&&!isFull(top)) {top->count++;if (top->count == 1) {//如果入栈是第一个节点的话top->point = new_node;}else{new_node->next = top->point;top->point = new_node;}}elsereturn;
}//出栈
Node* pop(Stack* top) {Node* pop_node=NULL;if (!isEmpty(top)) {pop_node = top->point;top->point = pop_node->next;pop_node->next = NULL;top->count--;}return pop_node;
}//获取栈顶元素
Node* get_stacktop(Stack* top) {return top->point;
}//遍历栈
void show_stack(Stack* top) {Node* cur = top->point;while (cur) {printf("%d %s %d\n", cur->data.age, cur->data.name, cur->data.num);cur = cur->next;}printf("Print over!\n");
}//清空栈
void clear_stack(Stack* top) {Node* cur;while (top->point) {cur = top->point;top->point = cur->next;free(cur);}printf("Clear successfully!\n");
}int main() {Stack top;stack_init(&top);//初始化ElemType data[4] = { {15,"Jack",01},{16,"Leimu",02},{17,"Lamu",03},{18,"Ajx",04} };for (int i = 0; i < 4; i++) {push(&top, data[i]);//入栈操作}show_stack(&top);//遍历栈Node* out_data=pop(&top);//出栈操作printf("%d %s %d\n", out_data->data.age, out_data->data.name, out_data->data.num);clear_stack(&top);//清空栈
}

 以上就是本期的内容,喜欢的给个关注吧!我们下一次再见!

http://www.hkea.cn/news/659848/

相关文章:

  • 开发区网站制作公司seo关键词有话要多少钱
  • 网站被篡改处理app拉新平台
  • 在线房屋设计网站seo推广平台服务
  • 电子政务门户网站建设代码短链接生成网址
  • 崔各庄地区网站建设百度非企渠道开户
  • 怎么用自己的电脑做网站服务器产品推广平台排行榜
  • 中国做的比较好的电商网站有哪些哈市今日头条最新
  • 微信怎么做网站推广百度网站优化培训
  • 网站开发支持多个币种电子技术培训机构
  • 移动网站设计与制作怎么找关键词
  • 国内移动端网站做的最好的厦门人才网597人才网
  • 建网站收费吗aso关键词覆盖优化
  • 西安的网站设计与制作首页微信视频号怎么推广引流
  • 顺义公司建站多少钱pc端百度
  • wordpress收费资源下载关键词优化的策略
  • 广州做网站建设的公司网站公司
  • 做网络平台的网站有哪些广州网站维护
  • 网页 代码怎么做网站东莞市民最新疫情
  • 电子商务网站设计中影响客户体验的元素有搜索引擎有哪些种类
  • 网站建设难点优化关键词技巧
  • 免费行情网站链接百度知道合伙人官网
  • 餐饮公司网站建设的特点大数据智能营销
  • 济南快速排名刷关键词排名seo软件
  • 系统做网站的地方百度推广登录后台登录入口
  • 集约化网站建设情况广告公司网站制作
  • 网站制作发票字节跳动广告代理商加盟
  • 义乌做网站武汉seo推广优化公司
  • 济宁哪家网站建设公司正规谷歌浏览器 免费下载
  • 有没有女的做任务的网站广东省新闻
  • seo长尾关键词优化如何做网站推广优化