C语言 栈的链表实现
自用
#include <stdio.h>
#include <stdlib.h>#define DataType int // 栈节点的数据域,这里为整型
#define bool int
#define ERROR 0typedef struct node
{ // 定义链表节点 数据域与指针域DataType data;struct node *next;
} *StackNodePtr, StackNode;
typedef struct stack
{StackNodePtr top; // top为栈顶指针,空栈时top==NULL,int size; // 设一个size可以降低计算链栈长度的时间复杂度
} LinkStack;LinkStack *InitStack();
void StackPushStack(LinkStack *p, DataType dt);
bool StackPopStack(LinkStack *p);
void StackClear(LinkStack *p);DataType StackGetTop(LinkStack *p);
int StackGetSize(LinkStack *p);
int StackIsEmpty(LinkStack *p);
void PrintStack(LinkStack *p);int main()
{DataType e;LinkStack *p = InitStack();printf("请输入一个整数(输入-1结束):");scanf("%d", &e);while (e != -1){StackPushStack(p, e);printf("请输入一个整数(输入-1结束):");scanf("%d", &e);}PrintStack(p);printf("栈的大小为%d\n", StackGetSize(p));printf("出栈测试:");StackPopStack(p);PrintStack(p);printf("\n");printf("取栈顶测试:");e = StackGetTop(p);printf("取出的栈顶为%d\n", e);}//初始化栈
LinkStack *InitStack()
{LinkStack *p = (LinkStack *)malloc(sizeof(LinkStack));p->top = NULL;p->size = 0;return p;
}// 入栈 链栈不用判断是否满 类似头插法
void StackPushStack(LinkStack *p, DataType dt)
{StackNodePtr temp; //temp用于产生新节点temp = (StackNodePtr)malloc(sizeof(StackNode)); // 随机分配空间temp->next = p->top; // 修改插入节点指针域,指向原来的栈顶元素(插入后变成老二)temp->data = dt; // 修改插入节点数据域为dtp->top = temp; // top指向插入节点++p->size; // size+1
}// 出栈 要检验栈是否空
bool StackPopStack(LinkStack *p)
{if (p->size == 0)return ERROR; // 栈空返回错误StackNodePtr temp = p->top; // 将栈顶指针保存到tempp->top = temp->next; // 让栈顶指针指向第二个节点free(temp); // 释放之前的栈顶指针--p->size; // size-1return 1;
}//清空栈
void StackClear(LinkStack *p)
{while (!StackIsEmpty(p)){ //只要栈不为空就一直出栈StackPopStack(p);}p->top = NULL; // 将栈顶指针变为空
}//获取栈顶元素
DataType StackGetTop(LinkStack *p)
{return p->top->data; // p->top为栈顶指针,指向栈顶节点,->为节点数据域
}
//获取栈大小
int StackGetSize(LinkStack *p)
{return p->size;
}
//判断栈是否为空
int StackIsEmpty(LinkStack *p)
{return !StackGetSize(p);
}//打印栈
void PrintStack(LinkStack *p)
{StackNodePtr temp = p->top;printf("栈顶:");while (temp){printf("%d->", temp->data);temp = temp->next;}printf("NULL");
}
C语言 栈的链表实现相关推荐
- c语言限流,C语言—栈
栈的操作:进栈和出栈 #include "stdafx.h" #include "stack.h" #define maxsize 20 typedef int ...
- 猴子选王c语言链表程序代码,数据结构(C语言)用栈和链表编写猴子选大王程序...
<数据结构(C语言)用栈和链表编写猴子选大王程序>由会员分享,可在线阅读,更多相关<数据结构(C语言)用栈和链表编写猴子选大王程序(3页珍藏版)>请在人人文库网上搜索. 1.i ...
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- java语言实现单链表---不含头结点
java语言实现单链表---不含头结点 一.相关概念 1.什么是线性表 2.什么是顺序表 3.什么是链表 4.单链表.双链表.循环单链表.循环双链表 5.头结点和首结点 6.常见的栈和队列与线性表的关 ...
- 饿了么交付中心语言栈转型总结
Photo @NeONBRAN 文 | 李杰 前言: 本文介绍了饿了么交付中心由 Python 语言栈转换到 Java 语言栈大致过程,一来是对前段时间的工作做下总结,另外也是想通过此次总结为其他应用 ...
- c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- Java数据结构 利用双栈实现链表操作
利用双栈实现链表操作 class CQueue {private int count;private ListNode head;private ListNode tail;public CQueue ...
- c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...
小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...
- 用链表c语言程序设计,C语言程序设计-基于链表的学生成绩管理系统
<C语言程序设计-基于链表的学生成绩管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计-基于链表的学生成绩管理系统(18页珍藏版)>请在人人文库网上搜索. 1.华北科技 ...
最新文章
- MapReduce输入输出的处理流程及combiner
- php-dev离线安装,局域网 pm2 离线安装
- PHP框架和springboot区别,Spring和SpringBoot的区别
- 计算机视觉领域还能耍什么花样?
- JAVA设计模式--简单介绍
- 全国计算机英语四六级准考证打印准考证号,2017全国大学生英语四六级准考证打印...
- PHP提高编程效率的方法
- MEF(Managed Extensibility Framework)学习笔记
- [渝粤教育] 西南科技大学 中国古代文学〔1〕 在线考试复习资料
- 教你下载BarTender 2016
- 哇撒!这几个SpringBoot前后端分离项目(附源码),star过千,快去收藏夹吃灰吧。。。...
- java acr122 读取数据_acr122读写器软件下载
- 读书笔记:《从生活常识的角度看懂财务报表》
- 阿里云存储开通与使用
- 好利来背后隐形富豪家族:店面千家,年入百亿
- Time to live exceeded
- 面试运维宝典专栏的小伙伴,互联网老辛来给你送福利了
- Spring bean销毁的过程
- 数电篮球电子计分器设计
- 计算机应用编程师职业指导,计算机应用个人职业生涯规划书.doc
热门文章
- 如何判断对方列表里是不是好友_怎么查看我在别人好友列表里是否单向好友?...
- iOS开发之直播App流程介绍
- 解决SPSS 22授权creat not jvm问题
- “抄袭事件”开庭小志
- 考研数据结构与算法代码实现目录
- Java遍历Map五种方法
- 推荐一款完整的互联网商城管理系统(附源码)
- 护卫神·云查杀系统V4.0-安全检测部分
- lepus监控oracle数据库_Lepus(天兔)数据库监控系统之web控制台介绍
- 笔试记录|小米9.8秋招软件开发方向笔试