栈的基本概念

  • 栈的定义:栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除的一端称为栈顶(top)。栈顶是由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是数组索引,对于链式栈,就是节点地址的指针)来指示。栈的插入和删除操作一般称为入栈和出栈。
  • 栈的特点:先进后出(FILO)。

栈的本质

栈依照存储结构可分为顺序栈和链式栈。由栈的定义可知,栈是一种在操作上稍加限制的线性表,即栈的本质是线性表,而线性表恰好有两种主要的存储结构——顺序表和链表。

顺序栈的实现

#define MaxSize = 100;

/*顺序栈的定义*/
typedef struct
{
int data[MaxSize];
int top;
}Stack; /*初始化*/
void initStack(Stack &st)
{
st.top = -;
} /*判断栈是否为空*/
bool isEmpty(Stack st)
{
return st.top == - ? true : false;
} /*进栈,返回:成功true,失败false*/
bool push(Stack &st, int x)
{
if(st.top == MaxSize-)
return false;
st.data[++st.top] = x;
return true;
} /*出栈,返回:成功true,失败false*/
bool pop(Stack &st, int &x)
{
if(st.top == -)
return false;
x = st.data[st.top--];
return true;
}

说明:在考试中,栈常常作为一个工具来解决其他问题,因此一般情况下,栈的定义以及操作可以写得很简单,不必调用以上函数。上述函数只作为标准操作来参考,使用价值并不高。在考题中比较实用的栈操作写法如下:

  • 定义一个栈并初始化(假设元素是int型)

    /*两句话连定义和初始化都有了*/
    int stack[MaxSize];
    int top = -;
  • 元素x进栈

    stack[++top] = x;
  • 元素x出栈
    x = stack[top--];

链栈的实现

/*链栈的定义*/
typedef struct
{
int data;
Stack *next;
}Stack; /*链栈的初始化*/
void initStack(Stack *&st)
{
st = (Stack*)malloc(sizeof(Stack)); //制造一个头结点
st->next = NULL;
} /*判断是否为空*/
bool isEmpty(Stack *st)
{
return st->next == NULL ? true : false;
} /*进栈代码*/
void push(Stack *st, int x)
{
Stack *p = (Stack*)malloc(sizeof(Stack));
p->data = x;
/*以下头插法进栈*/
p->next = st->next;
st->next = p;
} /*出栈,返回:成功true,失败false*/
bool pop(Stack *st, int &x)
{
if(st->next == NULL)
return false;
Stack *p = st->next;
x = p->data;
/*以下是单链表删除操作*/
st->next = p->next;
free(p);
return true;
}

说明:对于链栈,和顺序栈一样,在应对考试的时候,不必像以上那样严格地写出其操作的函数,只需摘取其中必要的语句组合在自己的题目代码中即可,类似思路类似顺序栈的讲解。特别注意,在考研中考察链栈的频率要比顺序栈的频率少得多,因为顺序栈定义和操作都简单得多。因此,对程序设计题,七分精力放在顺序栈中。

后续补上顺序栈的应用

天勤考研数据结构笔记—栈的C语言实现的更多相关文章

  1. 数据结构笔记--栈的总结及java数组实现简单栈结构

    杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...

  2. 【PHP数据结构】栈和队列的应用

    通过栈和队列的学习,我们似乎会感觉到其实数据结构还是非常简单的嘛.当然,这只是一个开始,我们从顺序表.链表开始,到现在的栈和队列,其实都是为了将来在铺路.在树和图的遍历算法中,都可以见到栈和队列的身影 ...

  3. 【PHP数据结构】栈的相关逻辑操作

    对于逻辑结构来说,我们也是从最简单的开始.堆栈.队列,这两个词对于大部分人都不会陌生,但是,堆和栈其实是两个东西.在面试的时候千万不要被面试官绕晕了.堆是一种树结构,或者说是完全二叉树的结构.而今天, ...

  4. 《数据结构与算法分析:C语言描述》读书笔记

    我们数据结构的课用了这本英文教材,作者是Mark Allen Weiss.总体来说比<算法导论>简单很多,但内容上交集非常大.其实是因为去掉了大多数证明和数学,对于没有耐心看符号和公式的人 ...

  5. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  6. 基础数据结构 之 栈(python实现)

    栈是编程开发中的两种较为简单的数据结构.栈和队可用于模拟函数的递归.栈的特点是后进先出.其常用操作包括:出栈,入栈等.在出栈前,需判断栈是否为空.在入栈时,需判断栈是否已满. 下面给出一个用pytho ...

  7. PHP数据结构:栈、队列、堆、固定数组

    数据结构:栈 队列: 堆: 固定尺寸的数组:

  8. python数据结构之栈与队列

    python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...

  9. 不使用数据结构反转栈 递归 CVTE实习 CVTE是一家什么公司

    本文因为垃圾csdn标题字限制,标题写不好.本文想说一个算法,和我在CVTE的实习,我看到CVTE是一家什么公司.如果想要喷我的,可以留言,我不会理.如果想喷公司,可以在博客评论或发到我邮件linde ...

随机推荐

  1. vue.js中 this.$nextTick()的使用

    官方文档是这样介绍的: this.$nextTick 将回调延迟到下次DOM更新循环之后执行.在修改数据之后立即使用它,然后等待DOM更新. this.$nextTick 跟全局方法 vue.next ...

  2. MVN 报错1

    找不到mapper映射文件 只打包了下面这些 所以pom.xml文件中添加 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> <build> ...

  3. .net大文件上传断点续传源码

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  4. java中jsp的EL的定义以及使用

    1.定义: EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方 ...

  5. Killer Problem (UVA 11898 )

    Problem You are given an array of N integers and Q queries. Each query is a closed interval [l, r]. ...

  6. 90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来

    1.for 循环 我们大部分的时候代码里面都有for循环,然后里面嵌套一段逻辑处理,下面有两种方法来完成: 二者的性能差距有多大呢,一般我们用内置的timeit模块来量化比较: 把传统的for改成推导 ...

  7. HDU 1711:Number Sequence(KMP)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. Binary Protocol

    A. Binary Protocol 这道题要唯一注意的一点就是数字0的表示--0个"1"来表达,所以字符串"100"所表示的数字就是100 附代码: // C ...

  9. RESTful API是什么?

    1. REST 是Repersentational State Transfer的缩写 翻译为"表述性状态传递",那么什么是表述性状态传递呢?为了理解这个词语,我们从"R ...

  10. 修改mp3图片和信息——BesMp3Editor

    导读 BesMp3Editor, 是一款小巧的 MP3 编辑工具,可以修改.添加 MP3 上的图片.歌曲名.歌手.专辑信息. 最近想给 BesLyric-for-X 添加一个功能,为下载下来的歌曲添加 ...