#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;
}

栈的链式存储结构(企业级链表)相关推荐

  1. 3.2_栈_链式存储结构(链表形式)

    [链式存储结构] 栈的链式存储结构,简称链栈. [具体实现] package com.Higgin.LinkStack;import java.util.EmptyStackException;/** ...

  2. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

  3. 链式存储mysql_链栈:栈的链式存储结构

    前面讲完了栈的顺序存储结构,我们现在来看看栈的链式存储结构,简称为链栈. 链栈是没有附加头结点的运算受限的单链表.栈顶指针就是链表的头指针. 栈是用栈顶来做插入和删除操作,那么对于链栈的栈顶放在链表的 ...

  4. 栈的链式存储结构及实现

    今天学习栈的链式存储结构. 链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构. 栈的链式存储结构,简称为链栈.想想看,栈只是栈顶来 ...

  5. 关于栈的链式存储结构

    之前在创建栈的链式存储结构时,想当然误以为栈的top指针会指向链表的尾结点,在创建链表结构时的写法误写为: for(j=0;j<i;j++){         temp=(struct Node ...

  6. 数据结构与算法——栈的链式存储结构及实现

    目录 前言 一.栈的链式储存结构 二.栈的链式储存结构的操作 2.1   进栈操作 2.2   出栈操作 总结 前言 讲完了栈的顺序储存结构,我们现在来看看栈的链式存储结构,简称为链栈. 由于单链表中 ...

  7. 3.3 栈的链式存储结构

    <?php header("content-type:text/html;charset=utf-8"); /*** 栈的链式存储结构的基本操作**包括* 1.初始化 __c ...

  8. STL链式存储结构——————list链表

    c++的STL(标准模版库)提供了链表类的操作,称为list(表),是双向链表实现的 链式存储结构在实现插入.删除操作时不需要移动大量的数据元素.所以,链式存储结构适用于经常需要进行插入和删除操作的线 ...

  9. 栈的链式存储结构(C语言实现)

    简要 链栈就是利用单链表作为栈的存储结构,单链表的第一个节点为栈顶,而最后一个节点为栈底,链栈既可以带头节点也可以不带头节点. 实现过程 实现代码 #include<iostream> # ...

最新文章

  1. SpringBoot 学习 | raibaby halo 之安装部署 - Ali0th
  2. Roger Ver:BCH比BCE更适合机构投资者
  3. 近期几个电车调试视频
  4. TreeMap之floorKey
  5. 安卓实训项目:音乐播放器2.0——实训报告2
  6. Vue的条件渲染指令
  7. Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server
  8. vue 函数 路由跳转_vue路由跳转的方式
  9. usb接口驱动_技术丨USB接口无法识别设备的处理方法
  10. mac 安装使用Liteide
  11. 启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用【转】
  12. linux下jdk1.8搭建笔记
  13. Opencv图像处理(全)
  14. Word删除与新增页眉或页脚的横线
  15. OSChina 周四乱弹 ——你想用小鱼干拐走本公主么
  16. 网络安全等级保护的过程
  17. PHP array_column() 函数
  18. 推荐电影 迪士尼经典动画片大全 1937-2008
  19. MTC110-16-ASEMI可控硅模块MTC110-16
  20. leetcode 89

热门文章

  1. php rc4对称加密函数,[PHP]记录一下PHP几种加密算法RC4,AUTHCODE等
  2. quik 导入gaf,cocos2dx android 和ios 导入gaf
  3. 程序员面试题精选(31):从尾到头遍历链表
  4. AEJoy —— 表达式之速度和频率控制(七)【JS】
  5. OJ1015: 二次方程的实根
  6. 一组酒瓶的静物小场景是怎么渲染的(附工程)
  7. Unity shaderGraph 学习记录——玻璃折射
  8. 一文让你彻底掌握操作符(超详细教程)
  9. PHP怎么统计下载次数(下载量代码)
  10. 手机linux命令软件,手机上如何学习Linux?有哪些软件可以使用?