/*
编译器: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. SPJ 讨论

    设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式: S( SNO,SNAME,STATUS,CITY): P(PNO,PNAME,COLOR,WEIGHT): J(JNO,JNAME,CITY ...

  2. hdu 2795 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include <cstdio> #include <cmath> # ...

  3. Git全解析之用起来先

    文章目录 1. Git全解析之用起来先 1.1. 先安装Git环境 1.2. 配置 1.3. 简单了解Git 1.3.1. Git对象模型 SHA 1.3.2. Git目录与工作目录 1.4. 可以开 ...

  4. MapReduce多用户任务调度器——容量调度器(Capacity Scheduler)原理和源码研究

    前言:为了研究需要,将Capacity Scheduler和Fair Scheduler的原理和代码进行学习,用两篇文章作为记录.如有理解错误之处,欢迎批评指正. 容量调度器(Capacity Sch ...

  5. pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法

    问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...

  6. java关键字synchronized

    1.对于synchronized方法和synchronized块,一个线程访问时,其他线程可以访问此类的非synchronized方法或块,不能访问其他带synchronized的方法或块. 举例如下 ...

  7. Android下 scrollview的滚动停止事件的监听方法

    使用递归调用的方法,每隔5毫秒检查一下是否已经停止,如果已经停止,就拿到事件啦! 不扯蛋,直接上代码. scrollContent就是我的scrollview. [代码]java代码: ? 1 2 3 ...

  8. Linux 调度器模拟

    http://www.ibm.com/developerworks/cn/linux/l-linux-scheduler-simulator/ LinSched LinSched 是驻留在用户空间中的 ...

  9. Java 理论与实践: 用弱引用堵住内存泄漏---转载

    要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的.在大多数时候,好的软件工程技术保证这是自动实现的,不用我们对对 ...

  10. JavaScript自动关闭窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...