栈的链式存储方法的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----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
随机推荐
- lightoj 1013 dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1013 #include <cstdio> #include <cst ...
- eclipse下开发简单的Web Service
service部分 在eclipse下新建一个动态web项目 在项目中新建一个service类 编写SayHello类的代码 package org.sunny.service; //包不要引用错了 ...
- MVC 文件上传
项目需要,做一个图片上传的功能,本来是很简单,但是需要同时上传多个文件,并分条带一些额外的信息,听上去很复杂,通过下面图就可以一目了然: 网上找过一些方法,但多为不支持图片与其他信息关联,或者分两次上 ...
- OpenGL ES2.0基础入门
1.OpenGL ES 1.x渲染管线(又称为渲染流水线) (1).基本处理: 基本处理主要是设定3D空间中物体的顶点坐标.顶点对应的颜色.顶点的纹理坐标等属性,并且指定绘制方式. 常见的绘制方式有: ...
- IOS中UITableViewCell的重用机制原理
创建UITableViewController子类的实例后,IDE生成的代码中有如下段落: - (UITableViewCell *)tableView:(UITableView *)tableVie ...
- [PWA] 3. Devtool
You can debug with chrom dev tool: 1. Use console to debug service worker: Swith to sw.js context th ...
- android下大文件分割上传
由于android自身的原因,对大文件(如影视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. //文件分割上传 ...
- spring mvc DispatcherServlet详解之一---处理请求深入解析
要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...
- Linux使用SSH远程连接方式和更改密码 ,自己空间转移过来的。
一. 远程连接Linux系统需要一个方便的SSH连接工具putty就不错!工具在本日志的附件下载,解压密码是QQ号,云盘访问密码 90891.把远程主机ip和端口号填写上然后选择连接方式为“SSH”. ...
- 0_Linux_虚拟机安装
虚拟机的安装0Snapshot和clone 系统分区(由硬盘的性能所限制的) 1分区类型: 主分区:最多有4个 扩展分区:最多只能有1个:主分区加扩展分区最多有4个:不能写入数据,只能包含逻辑分区,不 ...