#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语言实现链栈的更多相关文章

  1. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...

  2. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  3. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  4. 纯C语言实现链队

    #include <stdio.h> #include <stdlib.h> typedef int QElemType; typedef struct QNode{ QEle ...

  5. C语言实现链栈

    我自己写的代码部分: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct ...

  6. 纯C语言实现顺序栈

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...

  7. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  8. C语言简单实现链栈基本几个功能

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  9. 【小白成长撸】--链栈(C语言版)

    // 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...

随机推荐

  1. Vue-router中的history模式和hash模式

    还记得在我们从零开始搭建一个Vue-cli3.0项目时,预设置中出现过这样一条询问: 即是否选择历史模式,当时我们很坚决地选了否,那么哈希模式和历史模式究竟有什么区别,今天我们来一探究竟. 哈希模式( ...

  2. CSS设置文本的水平对齐方向

    介绍 在CSS中text-align属性有3种值,如下:left左.center中.right右. 由于简单我就不再多的介绍了直接进入text-align属性实践了,如果大家是新手自己一定要去实践哈, ...

  3. 【LeetCode】53.最大子序和

    最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: ...

  4. [转]Spring Cloud在国内中小型公司能用起来吗?

    原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 原文地址:https://www.zhihu.com/question/61403505 今天 ...

  5. Oracle Merge Into 使用注意事项

    我们操作数据库的时候,有时候会遇到insertOrUpdate这种需求.如果数据库中存在数据就update,如果不存在就insert.Orcale数据库都提供了 MERGE  INTO 方法来处理这种 ...

  6. Python—实现ssh客户端(连接远程服务器)

    paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一 ...

  7. PyQt5-TableWidget 表格视图

    基于PyQt5 postgreSQL实现简单的数据插入.数据表格查询. 运行前需要安装psycopg2 模块,配置好postgerSQL. 先看效果图: 第1列为日期时间.第2列为自增1的编号.第3到 ...

  8. nginx代理ambassador,再转到mlfow-tracking服务

    这个服务的代理,相对于服务网关来说,有些典型, 今天调通了,作个记录. 一,nginx配置 upstream ai_ambassador { ip_hash; server 1.2.3.4:30080 ...

  9. 爬虫之爬取豆瓣图书名字及ID

    from urllib import request from bs4 import BeautifulSoup as bs #爬取豆瓣最受关注图书榜 resp = request.urlopen(' ...

  10. 安装QTP之后造成环境变量java冲突问题的解决方案

    参考:http://www.cnblogs.com/yhcreak/p/6340125.html