纯C语言实现链栈
#include <stdio.h>
#include <stdlib.h> typedef int ElemType; typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode; StackNode *InitStack(StackNode *S);//初始化
StackNode * DestroyStack(StackNode*S);//销毁
void ClearStack(StackNode*S);//清空
int StackEmpty(StackNode*S);//判空
int StackLength(StackNode*S);//栈长度
ElemType GetTop(StackNode*S);//获取栈顶元素,不修改指针位置
StackNode *Push(StackNode*S, ElemType e);//插入栈顶
StackNode *Pop(StackNode *S, ElemType *e);//删除栈顶
void StackTraverse(StackNode *S);//从栈顶依次遍历 //初始化
StackNode *InitStack(StackNode *S){
S = NULL;
printf("初始化成功\n");
return S;
} //销毁,返回空指针给S
StackNode *DestroyStack(StackNode*S){
StackNode *p = S->next;
while(p){
free(S);
S = p;
p = p->next;
}
printf("销毁成功\n");
return NULL;
} //清空
void ClearStack(StackNode*S){
printf("清空\n");
StackNode *p = S;
while(p!=NULL){
p->data = ;
p = p->next;
}
printf("清空成功\n");
} //判空
int StackEmpty(StackNode*S); //栈长度
int StackLength(StackNode*S){
int len = ;
StackNode *p = S;
while(p!=NULL){
len++;
p = p->next;
}
return len;
} //获取栈顶元素,不修改指针位置
ElemType GetTop(StackNode*S){
if(S!=NULL){
printf("栈顶元素为%d", S->data);
return S->data;
}else{
printf("空链栈无栈顶元素\n");
return NULL;
}
} //插入栈顶,返回指针指向当前栈顶
StackNode *Push(StackNode*S, ElemType e){
StackNode *p = NULL;
p = (StackNode *)malloc(sizeof(StackNode));
p->data = e;
p->next = S;
S = p;
printf("%d入栈成功\n", e);
return S;
} //删除栈顶,返回指针指向当前栈顶
StackNode *Pop(StackNode *S, ElemType *e){
StackNode *p = NULL;//用于暂存删除元素
if(S == NULL){
printf("空链栈,删除失败\n");
return NULL;
}
*e = S->data;
p = S;
S = S->next;
free(p);
printf("%d出栈成功\n",*e);
return S;
} //从栈顶依次遍历
void StackTraverse(StackNode *S){
StackNode *p = S;
if(p == NULL){
printf("空链栈\n");
return;
}
while(p != NULL){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
} int main(void){
StackNode *S;
ElemType e;
//初始化测试
S = InitStack(S); // //获取栈顶元素测试
// GetTop(S);
// S = Push(S, 999);
// GetTop(S); //入栈测试
S = Push(S, );
S = Push(S, );
S = Push(S, );
S = Push(S, );
S = Push(S, ); //栈长测试
printf("栈长%d\n",StackLength(S)); //遍历测试
StackTraverse(S); // //出栈测试
// S = Pop(S, &e);
// S = Pop(S, &e);
// S = Pop(S, &e);
// //printf("测试e是否改变: %d\n",e);
// S = Pop(S, &e);
// StackTraverse(S); // //清空测试
// ClearStack(S);
// StackTraverse(S); //// //销毁测试
// S = DestroyStack(S);
// StackTraverse(S); return ;
}
纯C语言实现链栈的更多相关文章
- C语言实现链栈以及基本操作
链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...
- C语言实现链栈的初始化&进栈&出栈&读取栈顶元素
/*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- 纯C语言实现链队
#include <stdio.h> #include <stdlib.h> typedef int QElemType; typedef struct QNode{ QEle ...
- C语言实现链栈
我自己写的代码部分: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct ...
- 纯C语言实现顺序栈
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...
- C语言简单实现链栈基本几个功能(适合新手看,大神可指正)
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- C语言简单实现链栈基本几个功能
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
随机推荐
- 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)
场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...
- linux下编译安装MariaDB 10.4.7,解决错误:cannot access ‘/auth_pam_tool_dir’: No such file or directory
编译安装MariaDB 10.4.7,前面的步骤我就不复述了,一切正常没什么问题. 当执行到:scripts/mysql_install_db --basedir=/usr/local/mysql - ...
- jqgrid后台处理搜索
jqgrid后台处理搜索, 如果点击jqgrid自带的搜索,则向后台传递“_search”参数,和searchField.searchOper.searchString三个值.如下所示: string ...
- Cesium-空间分析之通视分析(附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- UITableViewStyleGrouped 类型 tableView sectionHeader 高度问题
UITableViewStyleGrouped 类型的 tableView 在适配的时候出现很大的问题.记录一下 按照之前的方法,只需要执行以下的代码就能够很好的解决 section == 0 的时候 ...
- 【转载】Android开发中巧用Activity和Fragment
1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶.我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何 ...
- swift(五)swift的函数
/** * 函数的定义和调用 */ func showIntegerArray(array:[Int]) { for a in array { println("\(a)") } ...
- Tomcat启动分析(一)-从脚本到main函数分析
当我们在Linux下启动tomcat的时候,通过ps查看其进程信息为,接下来的内容我们就以此进行分析: [tomcat@fdd ~]$ ps -ef |grep java tomcat : tty1 ...
- Centos7安装配置----1配置网络
1.下载镜像安装,选择的是最小安装,设置root用户密码 (此处省略其中步骤,直到安装成功) 2.安装完成后重启,输入用户名密码进入系统 由于此时未配置网络,所以网卡什么的均未获取ip联网 输入ip ...
- Shell命令-网络操作之基础之ping、route
文件及内容处理 - ping.route 1. ping:测试主机之间网络的连通性 ping命令的功能说明 ping 命令用于检测主机.执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信 ...