栈的链式存储结构(企业级链表)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct StackNode{struct StackNode * next;//只维护指针域
};
//栈的链式结构体
struct Lstack{struct StackNode header;//头结点int m_size;//栈的大小
};
typedef void* LinkStack;
//初始化栈
LinkStack Init_stack()
{struct Lstack * stack = (struct Lstack *)malloc(sizeof(struct Lstack));if (stack == NULL){return NULL;}stack->header.next = NULL;stack->m_size = 0;return stack;
}
//入栈
void Push_stack(LinkStack stack, void * data)
{if (stack == NULL){return;}if (data == NULL){return;}//入栈就是头插法struct Lstack * mystack = (struct Lstack *)stack;//把用户数据转换成“挂钩”,就是连接用的指针struct StackNode * mynode = (struct StackNode *)data;//插入节点mynode->next = mystack->header.next;mystack->header.next = mynode;mystack->m_size++;}
//出栈
void Pop_stack(LinkStack stack)
{if (stack == NULL){return;}struct Lstack * mystack = (struct Lstack *)stack;if (mystack->m_size == 0){return ;}//保存第一个有数据的节点——栈顶元素struct StackNode * pFirst = mystack->header.next;mystack->header.next = pFirst->next;mystack->m_size--;
}
//返回栈顶元素
LinkStack Top_stack(LinkStack stack)
{if (stack == NULL){return NULL;}struct Lstack * mystack = (struct Lstack *)stack;if (mystack->m_size == 0){return NULL;}return mystack->header.next;//将第一个有数据的节点返回
}
//返回栈大小
int Size_stack(LinkStack stack)
{if (stack == NULL){return -1;}struct Lstack * mystack = (struct Lstack *)stack;return mystack->m_size;
}
//判断是否为空
int Isempty_stack(LinkStack stack)
{if (stack == NULL){return -1;}struct Lstack * mystack = (struct Lstack *)stack;if (mystack->m_size == 0){return 1;}return 0;
}
//销毁栈
void Destroy_stack(LinkStack stack)
{if (stack == NULL){return;}free(stack);stack = NULL;
}
typedef struct person{struct StackNode node;char name[40];int age;
}person;
void test()
{//prepare datasperson p1 = { NULL, "aaa", 12 };person p2 = { NULL, "bbb", 13 };person p3 = { NULL, "ccc", 14 };person p4 = { NULL, "ddd", 15 };person p5 = { NULL, "eee", 16 };//初始化栈LinkStack stack = Init_stack();//入栈Push_stack(stack, &p1);Push_stack(stack, &p2);Push_stack(stack, &p3);Push_stack(stack, &p4);Push_stack(stack, &p5);int size = Size_stack(stack);printf("栈的大小为:%d\n", size);while (Isempty_stack(stack) == 0){person * pTop = (person *)Top_stack(stack);printf("姓名是:%s,年龄是:%d\n", pTop->name, pTop->age);Pop_stack(stack);}int size_t = Size_stack(stack);printf("栈的大小为:%d\n", size_t);Destroy_stack(stack);}
int main()
{test();return 0;
}
栈的链式存储结构(企业级链表)相关推荐
- 3.2_栈_链式存储结构(链表形式)
[链式存储结构] 栈的链式存储结构,简称链栈. [具体实现] package com.Higgin.LinkStack;import java.util.EmptyStackException;/** ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 链式存储mysql_链栈:栈的链式存储结构
前面讲完了栈的顺序存储结构,我们现在来看看栈的链式存储结构,简称为链栈. 链栈是没有附加头结点的运算受限的单链表.栈顶指针就是链表的头指针. 栈是用栈顶来做插入和删除操作,那么对于链栈的栈顶放在链表的 ...
- 栈的链式存储结构及实现
今天学习栈的链式存储结构. 链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构. 栈的链式存储结构,简称为链栈.想想看,栈只是栈顶来 ...
- 关于栈的链式存储结构
之前在创建栈的链式存储结构时,想当然误以为栈的top指针会指向链表的尾结点,在创建链表结构时的写法误写为: for(j=0;j<i;j++){ temp=(struct Node ...
- 数据结构与算法——栈的链式存储结构及实现
目录 前言 一.栈的链式储存结构 二.栈的链式储存结构的操作 2.1 进栈操作 2.2 出栈操作 总结 前言 讲完了栈的顺序储存结构,我们现在来看看栈的链式存储结构,简称为链栈. 由于单链表中 ...
- 3.3 栈的链式存储结构
<?php header("content-type:text/html;charset=utf-8"); /*** 栈的链式存储结构的基本操作**包括* 1.初始化 __c ...
- STL链式存储结构——————list链表
c++的STL(标准模版库)提供了链表类的操作,称为list(表),是双向链表实现的 链式存储结构在实现插入.删除操作时不需要移动大量的数据元素.所以,链式存储结构适用于经常需要进行插入和删除操作的线 ...
- 栈的链式存储结构(C语言实现)
简要 链栈就是利用单链表作为栈的存储结构,单链表的第一个节点为栈顶,而最后一个节点为栈底,链栈既可以带头节点也可以不带头节点. 实现过程 实现代码 #include<iostream> # ...
最新文章
- 宝塔 面板 放行端口
- Python SciPy教程
- Mybatis工作中常见关系映射总结
- mysql数据库服务器默认端口_各个数据库的默认端口
- 三通道HART / Modbus网关HTM-631
- 计算机网络的常用命令汇总
- java 热度算法_Raddit算法Java实现
- 使用python查找重复值
- SQL查询实现差集(补集)运算
- 通过 Amazon EFS 对 NFS 文件系统权限进行细粒度控制
- php导出excel列宽,PHP导出Excel 之 Spreadsheet_Excel_Writer
- 1076 Wifi密码
- Kafka eagel 网页能打开,但是登录不上
- 当计算机遇上经济学:如何量化你的投资并获得第一桶金
- 如何轻松高效开展设备巡检?
- 《算法导论》第十二章——二叉搜索树
- 【附PPT下载】2021腾讯广告算法大赛 ACM MM Grand Challenge录用论文揭晓
- spring源码解析,vip视频解析源码
- 脑波艺术DAO·dream lab
- 2.2 在Matlab中进行相机标定
热门文章
- java面向对象知识点02
- python怎么用gamma函数_「gamma函数」Gamma函数 - seo实验室
- python中如何定义数组_python中数组是如何使用的?
- [NLP] SentenceTransformers使用介绍
- RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得
- Cocos2d-x《雷电大战》(2)-精灵随手指移动,你点哪我走哪!
- Qt判断摄像头是否被占用的一种方式
- getline函数详解
- 大屏页面三种缩放:按分辨率进行缩放、等比缩放(展示全部内容、展示部分内容和滚动条)
- 附完整python源码)基于tensorflow、opencv的入门案例_发票识别一:关键区域定位