LinkList.h

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1024
#define TRUE 1
#define FALSE 0//链表结点--存储下一个结点指针
typedef struct LINKNODE {struct LINKNODE *next;
}LinkNode;//链表--保存头结点,和链表长度
typedef struct LINKLIST {struct LINKNODE head;int size;
}LinkList;//初始化
LinkList* Init_linkList();//压入元素
void Push_LinkList(LinkList* stack, LinkNode* data);//取出栈顶元素
LinkList* Top_LinkList(LinkList* stack);//弹出栈顶元素
void Pop_LinkList(LinkList* stack);//判断是否为空
int IsEmpty_LinkList(LinkList* stack);//返回栈元素个数
int Size_LinkList(LinkList* stack);//清空栈元素
void Clear_LinkList(LinkList* stack);//销毁栈元素
void FreeSpace_LinkList(LinkList* stack);

LinkList.c:


#include"LinkList.h"
//初始化
LinkList* Init_linkList()
{LinkList* stack = (LinkList*)malloc(sizeof(LinkList));stack->size = 0;stack->head.next = NULL;return stack;
}//压入元素
void Push_LinkList(LinkList* stack, LinkNode* data)
{if (stack == NULL){return;}if (data == NULL){return;}data->next = stack->head.next;//stack->head.next = data->next;  //问题2:没有绕对。。stack->head.next = data;stack->size++;
}//取出栈顶元素
LinkList* Top_LinkList(LinkList* stack)
{if (stack == NULL){return NULL;}return stack->head.next;
}//弹出栈顶元素
void Pop_LinkList(LinkList* stack)
{if (stack == NULL){return;}LinkNode *pNext = stack->head.next;//pNext->next = stack->head.next; 我的错误做法stack->head.next = pNext->next;stack->size--;}//判断是否为空
int IsEmpty_LinkList(LinkList* stack)
{if (stack == NULL){return -1;}if (stack->size == 0)return TRUE;return FALSE;
}//返回栈元素个数
int Size_LinkList(LinkList* stack)
{if (stack == NULL){return -1;}return stack->size;
}//清空栈元素
void Clear_LinkList(LinkList* stack)
{if (stack == NULL){return;}stack->head.next = NULL;stack->size = 0;
}//销毁栈元素
void FreeSpace_LinkList(LinkList* stack)
{if (stack == NULL){return;}free(stack);
}

栈的链式存储.c:

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include"LinkList.h"typedef struct PERSON {LinkNode node;  //应用企业链表思想char name[64];int age;
}Person;
int main()
{Person p1, p2, p3, p4, p5;strcpy(p1.name, "aaa");strcpy(p2.name, "bbb");strcpy(p3.name, "ccc");strcpy(p4.name, "ddd");strcpy(p5.name, "eee");p1.age = 12;p2.age = 13;p3.age = 14;p4.age = 15;p5.age = 20;LinkList* stack = Init_linkList();Push_LinkList(stack, (LinkNode*)&p1);Push_LinkList(stack, (LinkNode*)&p2);Push_LinkList(stack, (LinkNode*)&p3);Push_LinkList(stack, (LinkNode*)&p4);Push_LinkList(stack, (LinkNode*)&p5);while (Size_LinkList(stack) > 0){Person* p = (Person*)Top_LinkList(stack);printf("Name:%s Age:%d\n", p->name, p->age);Pop_LinkList(stack);}FreeSpace_LinkList(stack);return 0;
}

运行结果:

数据结构-栈2-链式存储相关推荐

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

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

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

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

  3. 3.3 栈的链式存储结构

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

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

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

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

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

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

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

  7. 栈的链式存储框架搭建

    栈的链式存储 链式栈的节点 typedef struct LINKNODE{struct LINKNODE* next; }Linknode; 链式栈 typedef struct LINKSTACK ...

  8. 数据结构学习笔记——链式存储结构实现栈(链栈)

    目录 一.链栈的定义 二.链栈的初始化 三.判断链栈是否为空栈 四.进栈(插入操作) 五.出栈(删除操作) 六.读取链栈的栈顶元素 七.链栈的建立 八.链栈的遍历输出 链式存储结构实现栈完整代码 一个 ...

  9. 数据结构 树的链式存储(二叉表示法)

    //树的链式存储--二叉表示法 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef str ...

  10. 栈的链式存储结构(企业级链表)

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct StackNode{struct St ...

最新文章

  1. linux常用运维工具uptime、iostat、vmstat、sar
  2. 简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...
  3. 生活的色彩——摄影作品欣赏
  4. 有时候,爱就是那么简单
  5. 由浅到深理解ROS(7)-URDF
  6. 【计蒜客 - 2019南昌邀请赛网络赛 - K】MORE XOR(数学,找规律,打表)
  7. 给萌新HTML5 入门指南
  8. git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析
  9. 2021秋季“金九银十”跳槽必备:软件测试面试题(附带答案)
  10. 一听不是双休,连面试都免了
  11. paip.代码生成器数据源格式最佳实践
  12. python生成泊松分布_Python Numpy泊松分布
  13. 在机器学习领域,怎样写好一篇论文
  14. 树莓派基于QT实现利用USB转485模块进行串口通讯
  15. DS1302 时钟 51单片机实现时钟显示
  16. GitHub + PicUloader + jsDelivr : 通过 web 上传的免费图床和图像访问 CDN 加速
  17. 安卓机用什么无线蓝牙耳机好?适合安卓机的蓝牙耳机推荐
  18. 接口测试简介及用例设计思路
  19. 环球旅行之江西分会场
  20. 图片点击放大,你的网页也能做到!

热门文章

  1. asm 查看 数据文件 修改 时间_Oracle的ASM介绍及管理
  2. 华中科技大学计算机学院考研大纲,2021华中科技大学考研大纲参考书目汇总
  3. php 判断ajax访问,PHP里判断是否Ajax请求
  4. python继承语法_python中继承父类的例子(python3的语法)
  5. Mybatis源码分析第一天------Mybatis实用篇
  6. LeetCode算法入门- Remove Element -day20
  7. java 安卓调试,Android Studio(二十一):调试你的应用
  8. java 重定向关键字_SpringMVC 转发、重定向
  9. python locust api_干货 | 基于Locust的接口压测
  10. python常规异常的基类_Python警告的基类警告类是____。