/*
编译器:Dev-c++ 5.4.0
文件名:linkStack.cpp
代码版本号:1.0
时间:2015年10月15日18:56:06 */
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
#define OVERFLOW -2 typedef int sElemType;
typedef int Status;
typedef struct lNode{
sElemType data;
struct lNode *next;
}lNode,*linkStack; /*初始化空栈*/
Status initStack(linkStack *s){
*s=(linkStack)malloc(sizeof(lNode));
if(!(*s))
exit(OVERFLOW);
(*s)->next=NULL;
return OK;
} /*销毁栈*/
Status destroyStack(linkStack *s){
lNode *p=(*s)->next;
lNode *q;
if(!p){
return OK;
}
while(p){
q=p;
p=p->next;
free(q);
}
return OK;
} /*把S栈置为空栈*/
Status clearStack(linkStack *s){
(*s)->next=NULL;
return OK;
} /*判断栈是否为空栈*/
bool emptyStack(linkStack *s){
if((*s)->next)
return FALSE;
else
return TRUE;
} int stackLength(linkStack *s){
int len=;
*s=(*s)->next;
while(*s){
*s=(*s)->next;
len++;
}
return len;
}
/*入栈*/
Status push(linkStack *s,sElemType e){
lNode *p=(*s);
while(p->next){
p=p->next;
}
p->next=(linkStack)malloc(sizeof(lNode));
p->next->data=e;
p->next->next=NULL;
return OK;
} /*出栈*/
Status pop(linkStack *s,sElemType *e){
lNode *p=(*s);
lNode *q;
while(p->next){
q=p;
p=p->next;
}
q->next=NULL;
*e=p->data;
free(p);
return OK;
} /*得到栈顶元素*/
Status getTop(linkStack *s,sElemType *e){
lNode *p=(*s);
if(!p->next){
printf("栈为空,无法得到栈顶元素\n");
return ERROR;
} while(p->next){
p=p->next;
}
*e=p->data;
return OK;
} int visit(sElemType c){
printf("%d ",c);
return ;
}
/*遍历栈*/
Status stackTraverse(linkStack *s,int (*visit)(sElemType)){
linkStack p=(*s)->next;
while(p){
visit(p->data);
p=p->next;
}
return OK;
} int main(){
linkStack S;
initStack(&S);
sElemType e;
for(e=;e<=;e++)
push(&S,e);
printf("\n遍历前:");
stackTraverse(&S,visit);
int i;
for(i=;i<=;i++)
pop(&S,&e);
printf("\n弹出%d个元素后:",i-);
stackTraverse(&S,visit);
getTop(&S,&e);
printf("\n栈顶元素为:%d",e);
clearStack(&S);
if(emptyStack(&S))
printf("\n栈变为空栈了");
system("pause");
return ;
}

栈的链式存储方法的C语言实现的更多相关文章

  1. C++编程练习(4)----“实现简单的栈的链式存储结构“

    如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...

  2. C语言- 基础数据结构和算法 - 栈的链式存储

    听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...

  3. 栈的链式存储 - API实现

    基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...

  4. C++_template_栈的链式存储及实现

    由于在C++数据结构中的代码不完整,特补全.等日后当工程库调用. 若有疑问,请留言. #include<iostream> using namespace std; template< ...

  5. 栈(链式存储) C++模板实现

    #include <iostream> using namespace std; //栈结点类 template <typename T> class stackNode{ p ...

  6. Java数据结构系列之——栈(2):栈的链式存储结构及其操作

    package Stack; import LinkList.SinglyLinkList; public class LinkListStack { private SinglyLinkList&l ...

  7. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  8. 栈的顺序存储和链式存储c语言实现

    一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...

  9. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

随机推荐

  1. python 代码格式化工具:autopep8

    学习资料: https://github.com/hhatto/autopep8 背景 autopep8 会根据 PEP 8 样式文档来格式化 python 代码.它使用 pep8 来决定代码的哪部分 ...

  2. 专注于个人服装定做_服装设计_Fabric_Design_Tailor-迦勒定制网

    专注于个人服装定做_服装设计_Fabric_Design_Tailor-迦勒定制网 客服热线:400-720-7206 工作时间:AM 09:00-PM 10:00 周六/周日/节假日:设计师休息

  3. DNA repair - HDU 2457(自动机+dp)

    题目大意:给你N个DNA的串,也就是至包含'A','T','G','C'四种碱基的,这些给定的串都是带有遗传病的,然后给你一个不会超过1000的串,问你至少几个地方才能让这个串不包含遗传病,如果不论怎 ...

  4. ARES

    ARES规划是恒生公用技术平台规划,以敏捷Agility.重用性Reused.扩展性Extend.简单性Simple为核心特性与价值取向,规划涉及ARES Server运行支撑平台.ARES Stud ...

  5. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  6. 【转载】运维小技巧:使用ss命令代替 netstat

    转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...

  7. web前端面试试题总结---其他

    其他问题 原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的? 你遇到过比较难的技术问题是?你是如何解决的? 设计模式 知道什么是singleton, factory, strategy ...

  8. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  9. vs2008 多人同时开发项目时的代码注释规范格式 分类: C#小技巧 2014-04-23 14:12 297人阅读 评论(0) 收藏

    多人同时开发一个项目,区分项目的那个窗体是谁开发的,例:下面的格式 /************************************************       模块:服务器设置   ...

  10. [PWA] 13. New db and object store

    Create a db: import idb from 'idb'; var dbPromise = idb.open('test-db', 2, function (upgradeDb) { sw ...