栈的链式存储方法的C语言实现
/*
编译器: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语言实现的更多相关文章
- C++编程练习(4)----“实现简单的栈的链式存储结构“
如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...
- C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- 栈的链式存储 - API实现
基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...
- C++_template_栈的链式存储及实现
由于在C++数据结构中的代码不完整,特补全.等日后当工程库调用. 若有疑问,请留言. #include<iostream> using namespace std; template< ...
- 栈(链式存储) C++模板实现
#include <iostream> using namespace std; //栈结点类 template <typename T> class stackNode{ p ...
- Java数据结构系列之——栈(2):栈的链式存储结构及其操作
package Stack; import LinkList.SinglyLinkList; public class LinkListStack { private SinglyLinkList&l ...
- 【Java】 大话数据结构(6) 栈的顺序与链式存储
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...
- 栈的顺序存储和链式存储c语言实现
一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
随机推荐
- 使用开源软件sentry来收集日志
原文地址:http://luxuryzh.iteye.com/blog/1980364 对于一个已经上线的系统,存在未知的bug或者运行时发生异常是很常见的事情,随之而来的几点需求产生了: 1.系统发 ...
- Registering Shell Extension Handlers
最近在做Windows shell extension 的开发工作,对shell extension handler的注册机制有点疑问,以下摘自MSDN:http://msdn.microsoft.c ...
- RabbitMQ-死信(Dead Letter)
对于有异常的消息我们可以有如下做法: 记录下来再ack. nack或者reject,同时将requeue设为false. 在第2条的基础上增加死信(Dead Letter). 上边的第3个做法可以 ...
- SQL中的case when then else end用法
--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' ...
- cgdb调试postgresql
之前一直用gdb调试代码,最近在搞pg的时候用了一个cgdb,体验很好,调试pg代码的时候真的很方便. 本文主要讲解在进行pg内核开发的时候,如何搭建一个环境,用cgdb方便快捷的调试postgres ...
- mybatis 与 ehcache 整合[转]
1.简介 MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及结果集的检索. Ehcache 是现在最流行的纯 ...
- React Native 从入门到原理
React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却寥寥无几. 本文分为两个部分:上半部分用通 ...
- python手机号码运营商归属测试
#手机号码测试: def number_test(): while True: number = input('Please enter your phone number:') CN_mobile ...
- codevs1955光纤通信(并查集)
/* 第一眼以为就是个区间覆盖 然后敲完提交60分0.0 然而觉得自己的做法很对 以为数据错了 后来发现XXX他的牛棚是一圈(牛过得挺好的啊 还能赏湖...) 然后枚举断开的点 可惜n=750 p=1 ...
- js页面加载事件
<body onload="myfunction()" > </body> <script type="text/javascript&qu ...