数据结构与算法分析-栈

数据结构与算法分析-栈(单链表实现)

//by xiabodan
#include <stdio.h>
#include <stdlib.h>

typedef int elementtype;

typedef struct node *stack;
typedef struct node *position;
struct node {
    elementtype data;
    position next;
};

int isempty(stack S);
void delete_stack(stack S);
stack create_stack(void);
elementtype top(stack S);
elementtype pop(stack S);
void push(stack S,elementtype data);

int isempty(stack S)
{
    return (S->next == NULL);
}
stack create_stack(void)
{
    stack S;
    S = (position)malloc(sizeof(struct node));
    if( S == NULL)
    {
        printf("create_stack : out of space");
        return ;
    }
    S->next = NULL; // S->next is top of stack ,because header can‘t store element
    return  S;
}
void delete_stack(stack S)
{
     if(S == NULL)
        printf("S is a empty stack!\n");
     else
     {
        while( !isempty( S))
            pop(S);
     }
}

elementtype pop(stack S)
{
    elementtype data;
    if(!isempty(S))
    {
        position tem;
        tem = S->next;//tem  point to the top node
        data = S->next->data;
        S->next = tem->next;//also S->next = S->next->next
        free(tem);
        return data;
    }
    else
        printf("pop : empty stack!\n");
    return 0;
}

elementtype top(stack S)
{
    if(!isempty(S))
        return (S->next->data);
    printf("top : empty stack!\n");
    return 0;
}

void push(stack S,elementtype data)
{
    position P;
    P = (position)malloc(sizeof(struct node));
    if( P == NULL)
    {
        printf("push : out of space");
        return ;
    }
    P->data = data;
    P->next = S->next;  //compare list , insert node location the first node here,but insert node anywhere in list
    S->next = P;
}

int main(int argc ,char** argv)
{
    stack S;
    int i = 0 ;
    elementtype data;
    S = create_stack();
    printf("push 10 datas from 0 to 9 \n");
    for(i=0;i<10;i++)
    {
        push(S,i);
    }
    printf("S is empty? %d \n",isempty( S));

    printf("pop 5 datas \n");
    for(i=0;i<5;i++)
    {
        data = pop(S);
        printf("pop data is : %d\n",data);
    }
    printf("push 2 datas 11,12\n");
    push(S,11);
    push(S,12);
    printf("pop all remain datas \n");
    while(!isempty( S))
    {
        data = pop(S);
        printf("pop data is : %d\n",data);
    }
    printf("S is empty? %d \n",isempty( S));
    delete_stack(S);

}

时间: 2024-10-26 02:04:49

数据结构与算法分析-栈的相关文章

《数据结构与算法分析》学习笔记(四)——栈ADT

一.栈ADT是what? 1.定义 栈,是限制插入和删除都只能在一个位置上进行的表. 2.图示 3.栈的基本功能 (1)是否为空 (2)进栈 (3)出栈 (4)清空 (5)取栈顶 二.栈的链表实现 <数据结构与算法分析>学习笔记(四)--栈ADT

《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了生命. 本章学习重点: 理解抽象数据类型(ADT)的概念 学习如何对表进行有效的操作 熟悉栈ADT及其在实现递归方面的应用 熟悉队列ADT及其在操作系统和算法设计中的应用 ADT 抽象数据类型(abstract data type)是一个操作的集合,是数学的抽象,在ADT中不涉及如何实现操作的集合,这可以看作是模块化设计的扩充. 对于每

数据结构与算法分析(5)表、栈和队列(一)

      本节讨论最简单和最基本的三种数据结构:表,栈和队列. 每种程序都明晰地至少使用一种这样的数据结构,而栈在程序中总要间接地用到. 内容: 1.介绍抽象数据类型(ADT)的概念; 2.阐述如何对表进行有效的操作; 3.介绍栈ADT及其在实现递归方面的应用; 4.介绍队列ADT及其在操作系统和算法设计上的与应用. (1)抽象数据类型 程序设计的基本法则之一是:例程不应超过一页. 模块化的优点: 1)调试小程序比调试大程序容易的多: 2)多个人同时对一个模块式程序编程更加容易: 3)一个写得

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

数据结构与算法分析-索引

作者:xiabodan 出处:http://blog.csdn.net/xiabodan 算法和数据结构是计算机科学的核心内容.作为程序猿,编程是我们的实战项目.然而,写出程序还不够.一个程序在应对一些大型而复杂的情况时.会耗费大量的时间.我们能够非常easy写出一个从文件里找到一个词的程序.比方逐词扫描.看是否相符.但假设我们的文件有几十TB,并且要从文件里找到上百个词,逐个扫描的办法就差点儿不可行.我们须要优化程序,以便我们的程序能够应对复杂问题. 算法研究解决这个问题的方法,而数据结构则是

数据结构和算法分析

转自[五月的仓颉] http://www.cnblogs.com/xrq730/p/5122436.html 数据结构 数据结构是计算机存储.组织数据的方式,是指数据相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率(这就是为什么我们要研究数据结构的原因),数据结构往往同高效的检索算法和索引技术相关. 常见的数据结构有数组.栈.队列.链表.树.散列等,这些数据结构将是本数据结构的分类中重点研究的对象. 算法分析 算法是为求解一个问题需要遵

【转】数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

数据结构与算法分析-第3章

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami