链栈介绍

链栈也是我们所说的采用链式存储结构的栈。往往通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。栈 是一种受限制的线性表,它具有后进先出(Last-In-First-Out)的特性。所以呢本次编写链栈呢 采用以前写的企业级单链表形式编写不知道企业级单链表?请看数据结构与算法:企业级链表实现(超详细),感觉这种思想超赞,你值得拥有

链栈相关算法接口

同样对外提供LinkStack类型也就是void* ,对用户隐藏底层代码实现,链表结点只维护链表结构和用户数据分类。用户数据只需在业务数据结构体最上面提供4个字节的空间即可。

#pragma once
#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__
#define MAXSIZE 1024
typedef enum { FALSE, TRUE } Boolean;typedef struct StackNode
{struct StackNode* next;
}StackNode;typedef void* LinkStack;//初始化
LinkStack Init_LinkStack();
//压栈
void Push_LinkStack(LinkStack stack, void* data);
//弹栈
void* Pop_LinkStack(LinkStack stack);
//获取栈顶
void* Top_LinkStack(LinkStack stack);
//是否为空栈
//1 是空,0 非空
int IsEmpty_LinkStack(LinkStack stack);
//栈元素个数
int Size_LinkStack(LinkStack stack);
//销毁 栈
void Destroy_LinkStack(LinkStack stack);#endif // !__LINKSTACK_H__

链栈相关算法实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "LinkStack.h"//链栈
typedef struct LStack
{StackNode header;//链栈头结点header.next 指向栈顶元素int size;
}LStack;//初始化
LinkStack Init_LinkStack()
{LStack* stack = (LStack*)malloc(sizeof(LStack));stack->header.next = NULL;stack->size = 0;return stack;
}
//压栈
void Push_LinkStack(LinkStack stack, void* data)
{if (stack == NULL || data == NULL){return;}LStack* myStack = stack;((StackNode*)data)->next = myStack->header.next;myStack->header.next = data;myStack->size++;
}
//弹栈
void* Pop_LinkStack(LinkStack stack)
{LStack* myStack = stack;if (stack == NULL || myStack->size == 0){return NULL;}StackNode* node = myStack->header.next;myStack->header.next = node->next;myStack->size--;return node;
}
//获取栈顶
void* Top_LinkStack(LinkStack stack)
{LStack* myStack = stack;if (stack == NULL || myStack->size == 0){return NULL;}StackNode* node = myStack->header.next;return node;
}
//是否为空栈
//1 是空,0 非空
int IsEmpty_LinkStack(LinkStack stack)
{LStack* myStack = stack;if (stack == NULL){return 1;}if (myStack->size == 0){return 1;}return 0;
}
//栈元素个数
int Size_LinkStack(LinkStack stack)
{LStack* myStack = stack;if (stack == NULL){return 0;}return myStack->size;
}
//销毁 栈
void Destroy_LinkStack(LinkStack stack)
{LStack* myStack = stack;if (stack == NULL){return;}free(myStack);myStack = NULL;
}

代码运行检测

Main.c测试代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "LinkStack.h"
//测试 数据
typedef struct Person
{StackNode node;char name[64];int age;
}Person;int main(int argc, char *argv[])
{Person p1 = { NULL,"Lily",11 };Person p2 = { NULL,"Laymond",21 };Person p3 = { NULL,"John",31 };Person p4 = { NULL,"Leo",41 };Person p5 = { NULL,"Zeo",51 };LinkStack stack = Init_LinkStack();Push_LinkStack(stack, &p1);Push_LinkStack(stack, &p2);Push_LinkStack(stack, &p3);Push_LinkStack(stack, &p4);Push_LinkStack(stack, &p5);printf("栈顶元素:name=%s,age=%d\n", ((Person*)Top_LinkStack(stack))->name, ((Person*)Top_LinkStack(stack))->age);printf("栈的元素个数:%d\n", Size_LinkStack(stack));Person* p = NULL;while (!IsEmpty_LinkStack(stack)){p = Pop_LinkStack(stack);printf("name=%s,age=%d\n", p->name, p->age);}printf("栈的元素个数:%d\n", Size_LinkStack(stack));Destroy_LinkStack(stack);return 0;
}

运行结果

线性表:链栈算法实现相关推荐

  1. 线性表----链式表

    定义 线性表的链式存储又称单链表,它是指通过任意的存储单元来存储线性表的数据.注意此时的数据在物理地址上不在连续,内存是动态分配的,而且数据是存放在结点中,结点组成链表,每个节点分为数据域和指针域,所 ...

  2. 线性表--链式实现方式

    清明节感冒了,休息了几天.前面实现了顺序方式的线性表,这篇文章笔者会简单的实现 链式方式的线性表. 在实现之前首先需要对其线性表的链式方式的特点做一个了解: 通俗的讲链式线性表就是元素之间逻辑相邻但是 ...

  3. 数据结构之线性表-链式存储之单链表(一)

    本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 单链表简介 线性表的最大的缺 ...

  4. c语言建立线性表输入,c语言 建立线性表 链式

    1.实验目的及要求 通过本实验,进一不了解线性表的操作,熟悉线性表的运算,了解链式存储结构的实现方法和在链式存储条件下实现线性的相关操作. 2.实验内容 用C 语言设计在链式存储结构下,建立.插入.删 ...

  5. 线性表-链式存储结构

    3.6 线性表的链式存储结构 3.6.1 顺序存储结构不足的解决办法 前面我们讲的线性表的顺序存储结构.它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素,这显然就需要耗费时间.能不能想办法解决 ...

  6. 线性表--链栈(十一)

    写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平台让我能够在这里分享所学所感. 我喜欢编程,喜欢代码,喜欢去做一个程序员. 努力学习,争取多年后 ...

  7. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...

    /** * * 1. 类LNode用作创建单链表时,生成新的节点. * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表) * 3. C ...

  8. 数据结构之线性表——链式存储结构之单链表(php代码实现)

    <?php /**** 1. 类LNode用作创建单链表时,生成新的节点.* 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)* ...

  9. 链式线性表和顺序线性表

    顺序线性表 顺序表的存储结构通常用一维数组来描述,数组的下标与元素在线性表中的序号相对应. 在这里插入代码片 线性表的存储结构: typedef struct {int elem[MAX_SIZE]; ...

  10. 【数据结构(C语言版)系列一】 线性表

    最近开始看数据结构,该系列笔记简单记录总结下所学的知识,更详细的推荐博主StrayedKing的数据结构系列,笔记部分也摘抄了博主总结的比较好的内容. 一些基本概念和术语 数据是对客观事物的符号表示, ...

最新文章

  1. 腾讯首位17级研究员/杰出科学家诞生
  2. EXHCHANGE2003总结-2: 备份与还原
  3. java集合类根接口:Collection和Map
  4. 在网页中给Flash加上超级链接
  5. 计算机英语讲课笔记05
  6. RabbitMQ和Kafka的显著差异(2)
  7. csharp语言_电脑绝技教你22天学精Csharp之第五天
  8. 兴业太阳能:将“绿色能源”带到国外
  9. android自动点击相应位置脚本,轻易连使用说明-自动连点器-安卓自动点击脚本 | MOS86...
  10. 3分钟教你如何在Word里快速制作单斜线和多斜线表头
  11. 2016——大数据版图
  12. 【c#】服务端客户端连接类
  13. CSS盒子塌陷及解决方法
  14. 战争雷霆服务器无响应,战争雷霆:2021年夏活马拉松活动简易攻略(空战篇)
  15. 微信4.11小程序新规后,怎么将小程序转成普通网址链接?
  16. 计算机及应用英文,计算机及应用专业英文简历模板
  17. c语言编译英语翻译器,【图片】【C语言】【windows】---在线翻译器【erbi_lucifer吧】_百度贴吧...
  18. ai人工智能_人工智能神话
  19. plc三人抢答器的设计
  20. 铁路信号计算机连锁毕业论文,铁路信号计算机联锁系统(毕业论文)

热门文章

  1. 快速卷积与快速相关——MATLAB
  2. Mac上神奇的内置搜索引擎——Spotlight(聚焦搜索)
  3. NOI数学之提高级:线性方程组的高斯消元法
  4. 小学奥数 7827 质数的和与积 python
  5. 1.10 编程基础之简单排序 10 单词排序 python
  6. 1284:摘花生《信息学奥赛一本通》
  7. java两个对象赋值_一起学Java(二十六)----- 对象之间赋值
  8. 及时输出_安全光幕没有输出信号怎么办?-意普ESPE
  9. redis 图片2进制保存_Redis数据结构底层的SDS了解吗
  10. 数字系统设计学习之出租车计价器设计