#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED #include <stdlib.h>
#include <stdio.h> //链式栈的结点
typedef struct LINKNODE {
struct LINKNODE *next;
}LinkNode; //链式栈
typedef struct LINKSTACK {
LinkNode head;
int size;
}LinkStack; //初始化函数
LinkStack *Init_LinkStack(); //入栈
void Push_LinkStack(LinkStack *stack, LinkNode *data); //出栈
void Pop_LinkStack(LinkStack *stack); //返回栈顶元素
LinkNode* Top_LinkStack(LinkStack *stack); //返回栈元素的个数
int Size_LinkStack(LinkStack *stack); //清空栈
void Clear_LinkStack(LinkStack *stack); //销毁
void FreeSpace_LinkStack(LinkStack *stack); #endif // LINKSTACK_H_INCLUDED
#include "LinkStack.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h> //初始化函数
LinkStack *Init_LinkStack() {
LinkStack *stack = (LinkStack *)malloc(sizeof(LinkStack));
stack->head.next = NULL;
stack->size = 0;
return stack;
} //入栈
void Push_LinkStack(LinkStack *stack, LinkNode *data) {
if(stack == NULL){
return;
}
if(data == NULL){
return;
}
data->next = stack->head.next;
stack->head.next = data;
stack->size++;
} //出栈
void Pop_LinkStack(LinkStack *stack) {
if(stack == NULL){
return;
}
if(stack->size == 0){
return;
} //第一个有效结点
LinkNode *pNext = stack->head.next;
stack->head.next = pNext->next;
stack->size--;
} //返回栈顶元素
LinkNode* Top_LinkStack(LinkStack *stack) {
if(stack == NULL){
return NULL;
}
if(stack->size == 0){
return NULL;
}
//返回头结点后面的第一个元素
return stack->head.next;
} //返回栈元素的个数
int Size_LinkStack(LinkStack *stack) {
if(stack == NULL){
return 0;
}
return stack->size;
} //清空栈
void Clear_LinkStack(LinkStack *stack) {
if(stack == NULL){
return;
}
stack->head.next = NULL;
stack->size = 0;
} //销毁
void FreeSpace_LinkStack(LinkStack *stack) {
if(stack == NULL) {
return;
}
free(stack); }
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include "LinkStack.h" typedef struct PERSON {
LinkNode node;
char name[64];
int age;
}Person; int main()
{
printf("链式栈!\n"); //创建栈
LinkStack *stack = Init_LinkStack(); Person p1, p2, p3, p4, p5;
strcpy(p1.name, "Jarvis1");
strcpy(p2.name, "Jarvis2");
strcpy(p3.name, "Jarvis3");
strcpy(p4.name, "Jarvis4");
strcpy(p5.name, "Jarvis5"); p1.age = 10;
p2.age = 20;
p3.age = 30;
p4.age = 40;
p5.age = 50; Push_LinkStack(stack, (LinkNode*)&p1);
Push_LinkStack(stack, (LinkNode*)&p2);
Push_LinkStack(stack, (LinkNode*)&p3);
Push_LinkStack(stack, (LinkNode*)&p4);
Push_LinkStack(stack, (LinkNode*)&p5); //输出
while(Size_LinkStack(stack) > 0) {
Person *p = (Person *)Top_LinkStack(stack);
printf("Name : %s, Age : %d \n", p->name, p->age);
Pop_LinkStack(stack);
} //销毁
FreeSpace_LinkStack(stack);
system("pause");
return 0;
}

链表栈C语言实现的更多相关文章

  1. C语言 复杂的栈(链表栈)

    //复杂的栈--链表栈 #include<stdio.h> #include<stdlib.h> #define datatype int//定义链表栈数据类型 //定义链表栈 ...

  2. 基于链表的C语言堆内存检测

    说明 本文基于链表实现C语言堆内存的检测机制,可检测内存泄露.越界和重复释放等操作问题. 本文仅提供即视代码层面的检测机制,不考虑编译链接级的注入或钩子.此外,该机制暂未考虑并发保护. 相关性文章参见 ...

  3. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  4. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

  5. java——链表、链表栈 LinkedListStack、链表队列 LinkedListQueue

    LikedList: package Date_pacage; public class LinkedList<E> { public static void main(String[] ...

  6. 【数据结构】之链表(Java语言描述)

    以前写过一篇帖子,记录了链表在C语言中的描述代码.C语言中没有链表的直接实现,因此,我们需要自己编写代码实现.请参考[我的这篇文章]. Java中默认为我们提供了链表的API—— LinkedList ...

  7. 链表栈的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  8. 指针与数据结构算法_链表(C语言)

    一.变量: 声明一个变量系统是没有给这个变量分配内存空间的: 例: int j;//编译的时候是没有分配内存空间的 ;//计算机在编译的时候就会给这个i分配4个字节的内存空间 二.malloc动态分配 ...

  9. 数据结构入门之链表(C语言实现)

    这篇文章主要是根据<数据结构与算法分析--C语言描述>一书的链表章节内容所写,该书作者给出了链表ADT的一些方法,但是并没有给出所有方法的实现.在学习的过程中将练习的代码记录在文章中,并添 ...

随机推荐

  1. macOS Sierra 如何安装任何来源的软件

    为了安全性考虑,macos是要手动勾选来自任何来源的选项才可以安装第三方应用软件,系统升级后,在新的系统中这一项是默认不显示的,如果想要出现和这一勾选选项,可以从终端中输入 sudo spctl -- ...

  2. log4j2配置文件xml详细了解

    log4j2配置文件xml详细了解 详细参考:https://www.cnblogs.com/new-life/p/9246143.html log4j 2.x版本不再支持像1.x中的.propert ...

  3. python之pymysql

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. 安装: pip3 install PyMySQL 常用参数: pymysq ...

  4. 使用ELK进行日志分析

    0x01 前言: 前段时间做应急,总是需要溯源分析,痛点是数据量比较大,想要短时间能分析出来.再者就是之前在调查某酒店事件的时候特别羡慕某产商有各种分析溯源工具.反思过后,终于在没有那么忙的时候开始搭 ...

  5. 修改MySQL表中自增编号

    alter table 表名 AUTO_INCREMENT = 值 例:

  6. SELinux 对nginx访问目录的影响

    centos新装的系统,用yum 安装的nginx . 因用yum 安装的nginx 默认目录在/usr下面. 当SELinux开启时,将会禁止访问设置在其他路径下的地址.比如我设置server 中 ...

  7. 使用CreateRemoteThread注入DLL

    DLL: // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" ...

  8. shell知识点(一)

    Shell1.概述Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核还是一个功能相当强大的编程语言,易编写.易调试.灵活性强2.shell解析器查看linux提供的shell ...

  9. Vue+NodeJS+ElementUI 的简单示例

    演示所使用到的工具:谷歌浏览器.HBuilder.cmd命令窗口.nodejs(自带npm). 1.先使用 vue create 命令创建一个项目,等待创建完成. 2.切换到项目中. 3.使用 vue ...

  10. JS拖动滑块验证

    使用这种验证方法的目的:证明当前的用户不是机器人~防止恶意操作. 实现思路: 1.获取silde滑块(获取元素) 2.为元素注册事件———鼠标点击事件(onmousedown)鼠标点击之后获得当前鼠标 ...