链栈即链式栈,也就是说我们不用再考虑空间的大小,可随心所欲的进行数据的插入/删除了。和顺序栈一样,仍然要保持其stack的特性,只在一端进行插入和删除,后进先出。

  (2018-02-14 代码更新)

  linkstack.h:

#ifndef  __LINKSTACK_H_
#define __LINKSTACK_H_ #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct lstack
{
KeyType key;
struct lstack * top;
}Stack; Stack*CreateStack();
int IsEmpty();
bool Push();
bool Pop();
Stack*getTopNode();
KeyType getTop();
void Clear();
void Destroy(); #endif

  linkstack.c:

/* linkstack.c */
#include <stdio.h>
#include <stdlib.h>
#include "linkstack.h" Stack*CreateStack(void)
{
Stack*s; s = (Stack*)malloc(sizeof(Stack));
s->top = NULL; return s;
} int IsEmpty(Stack*s)
{
return s->top == NULL;
} bool Push(Stack*s, KeyType Data)
{
Stack*p; if((p = (Stack*)malloc(sizeof(Stack))) == NULL)
return false;
p->key = Data;
p->top = s->top;
s->top = p;
return true;
} bool Pop(Stack*s)
{
Stack*p; if(IsEmpty(s))
return false;
p = s->top;
s->top = s->top->top;
free(p);
p = NULL;
return true;
} Stack*getTopNode(Stack*s)
{
return s->top;
} KeyType getTop(Stack*s)
{
return getTopNode(s)->key;
} void Clear(Stack*s)
{
while(!IsEmpty(s))
Pop(s);
} void Destroy(Stack*s)
{
if(s != NULL)
{
Clear(s);
if(s != NULL)
free(s);
s = NULL;
}
}

  

LinkStack(链栈)的更多相关文章

  1. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  2. 03链栈_LinkStack--(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

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

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

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

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

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

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

  6. 顺序栈,链栈,队列java实现

    顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...

  7. 链栈的基本操作(C语言)

    栈的链式储存结构称为链栈.链栈的节点类型与链式线性表的节点类型 定义相同,不同的是它是仅在表头进行操作的单链表.链栈通常用不带头节 点的单链表来实现,栈顶指针就是链表的头指针 ,如图所示: 代码如下: ...

  8. C++栈学习——顺序栈和链栈的差别

    C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...

  9. C语言链栈

    链栈与链表结构相似 typedef int elemtype; typedef struct linkedStackNode{ elemtype e; struct linkedStackNode * ...

随机推荐

  1. python入门(十九讲):多进程

    1.进程概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动.是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 狭义定义:进程是正在运行的程序的实例. 在早期面向进程设 ...

  2. mysql的数据库开放权限

    链接数据库之后运行下面的命令即可 grant all PRIVILEGES on *.* to %username%@'%' identified by '%password%'; 如给root链接数 ...

  3. 8.10-Day1T1-数字(number)

    数字number 题目大意 给定n,k,s,从1到n中取出k个数,使其之和等于s 求可行的方案数(模1e9+7) 题解 一眼dp,于是我去写了dfs,带着少的可怜的剪枝,快乐的tle着... 设 f[ ...

  4. git之路

    1.如何clone代码到本地 答:git clone https://github.com/antirez/redis.git 2.

  5. leetcode 25. K 个一组翻转链表

    # coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...

  6. 【资源分享】Dll Injector(DLL注入器)

    *----------------------------------------------[下载区]----------------------------------------------* ...

  7. Educational Codeforces Round 80 (Rated for Div. 2)E(树状数组,模拟,思维)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ],mx[],a[],pos[],sum ...

  8. 逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解

    C 语言提供了以下三种逻辑运算符. 一元:!(逻辑非). 二元:&&(逻辑与).||(逻辑或). 以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻 ...

  9. TD tree体验

    在体验了学长们设计的app后,我颇有感触,我们也可以凭借自己的力量来开发一款软件,虽然它可能并不如市面上相同类型的那么完美,但它对我们的意义却是不一样的. 我是在下午的见面会上看到的这款软件,接待的学 ...

  10. TensorFlow:谷歌图像识别网络inception-v3下载与查看结构

    学习博客: # https://www.cnblogs.com/felixwang2/p/9190731.html # https://www.cnblogs.com/felixwang2/p/919 ...