栈的链式存储方法的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----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
随机推荐
- 数据结构——Currency System in Geraldion
题目: Description A magic island Geraldion, where Gerald lives, has its own currency system. It uses b ...
- NOI题库2454 雷涛的小猫
2454:雷涛的小猫 总时间限制: 20000ms 单个测试点时间限制: 10000ms 内存限制: 65536kB 描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样 ...
- [Locked] Flatten 2D Vector
Problem Description: Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [ ...
- web容器线程数和程序中线程阻塞导致 请求超时
问题描述: web项目启动之后.调用dubbo的远程服务. 但是有个基础服务报错. 当并发访问用户量上来之后. dubbo服务的报错返回 比正常服务慢 不能正常消费服务 清理服务线程. 也就是dubb ...
- 10th day
貌似有几天没写博客了额.... 现在学习MySQL数据库,难度并不是很大,只是需要记忆的知识点比较多,好多语法之类的,比较容易混淆,而且老师讲课的速度还是蛮快的,虽然部分同学觉得听起来有点吃力,不过我 ...
- WinFrom玩转config配置文件
本文转载:http://www.dotblogs.com.tw/sam319/archive/2010/01/01/12753.aspx 有時候我們希望程式可以記下使用者的設定 下次開啟時可以繼 ...
- "Storage Virtualization" VS "Software-Defined Storage"
http://www.computerweekly.com/blogs/StorageBuzz/2013/07/storage-virtualisation-vs-soft.html 这篇blog的目 ...
- 重启adb服务
通过命令提示符的方式来重启ADB服务的步骤如下: 1.输入adb kill-server并按下Enter键. 2.输入adb start-server并按下Enter键. 这样将会顺利地关闭ADB服务 ...
- fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>
转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...