数据结构---栈的链表实现

栈的链表实现C代码如下:

#include <stdio.h>

typedef int ElemType;

typedef struct node
{
    ElemType Data;
    struct node *next;
}Node;

typedef struct stack
{
    Node *top;
}Stack;

//初始化栈
void InitStack(Stack *S)
{
    S->top=NULL;
}

//入栈
int PushStackValue(Stack *S)
{
    printf("Input the Value of stack member:\n(0-exit)\n");
    int value;
    int i=1;
    Node *NewNode=(Node *)malloc(sizeof(Node));
    printf("Please input the %dst value of stack:\n",i);
    scanf("%d",&value);
    NewNode->Data=value;
    NewNode->next=S->top;
    S->top=NewNode;
    i++;
    while(value)
    {
        Node *NewNode=(Node *)malloc(sizeof(Node));
        printf("Please input the %dst value of stack:\n",i);
        scanf("%d",&value);
        if(value!=0)
            i++;
        NewNode->Data=value;
        NewNode->next=S->top;
        S->top=NewNode;
    }
    S->top=S->top->next;
    return i-1;
}

//出栈
int PopStackValue(Stack *S,int len)
{

    if(len>0)
    {
        printf("the stack %dst value pop out: %d\n",len,S->top->Data);
    }
    else
    {
        printf("The Stack is empty\n");
    }
    len--;
    S->top=S->top->next;
    return len;
}

//判断栈空
void IsEmpty(Stack *S)
{
    if(S->top==NULL)
    {
        printf("The Stack is empty.\n");
    }
    else
    {
        printf("The stack is not empty.\n");
    }
}

//清空栈
void ClearStack(Stack *S)
{
    S->top=NULL;
}

//遍历栈
Stack * ScanStack(Stack *S)
{
    Stack *Temp=S;
    printf("The all stack member(from top to bottom) is:\n");
    while(S->top!=NULL)
    {
        printf("%d ",S->top->Data);
        S->top=S->top->next;
    }
    printf("\n");

    return Temp;
}

void main()
{
    Stack *S=(Stack *)malloc(sizeof(Stack));
    int len;

    InitStack(&S);
    len=PushStackValue(&S);
    len=PopStackValue(&S,len);
    len=PopStackValue(&S,len);
    S=ScanStack(&S);
    IsEmpty(&S);
}

运行结果:

转载请注明作者:小刘

数据结构---栈的链表实现

时间: 2024-10-28 09:19:11

数据结构---栈的链表实现的相关文章

数据结构学习——栈的链表实现(程序化)

关于栈的基本概念以及和Catalan数的关系,可以参见我的其他文章 参考资料<数据结构与算法分析--C语言描述> #include<stdio.h> #include<stdlib.h> /*栈的链表实现*/ typedef struct StackNode { struct StackNode *next; int data; }StackNode,*Stack; Stack CreateStack(void);//创建一个空栈 void MakeEmpty(Stac

数据结构-栈、队列和链表

一.栈stack 是后进先出的数据结构 栈顶指针指的始终是栈最上方元素的一个标记,即放在最上面的元素.栈顶元素为空时令top为-1. 在使用pop()函数和top()函数时,需要使用empty()判断栈是否为空. 在STL中stack容器来编写代码,STL定义stack的复杂度是O(1). 常见函数: clear() size() empty() push() pop() top() 二.队列queue 是一种先进先出的数据结构 需要一个队首指针front来指向队首元素的前一个位置,而使用一个队

数据结构应用实例#栈&amp;单链表#简易计算器

使用数据结构中的栈以及链表来制作一个能够处理中缀表达式的计算程序. 在该程序中输入的数字可以是任意正数.小数.(忘了添加对负数的支持,尽快补上) 输入的运算符可以是 + - * / ( ) 但请确保输入的表达式合法. 中缀表达式: 形如 9+(3-1)*3+10/2 的数学表达式.特点是运算符在被运算的两个数字中间,也就是我们日常接触的算式. 后缀表达式: 以上面的中缀表达式 9+(3-1)*3+10/2 为例 转换成后缀表达式为 9 3 1-3*+ 10 2/+ 特点是运算符紧跟在被运算的两个

数据结构:使用栈对链表元素位序进行反转

给定一个链表,业务需求:使用栈将链表中元素的次序进行反转. 输入 : List = 3 -> 2 -> 1 输出 : 1 -> 2 -> 3 输入 : 9 -> 7 -> 4 -> 2 输出 : 2 -> 4 -> 7 -> 9 算法过程:算法复杂度:O(n)1.遍历列表,将所有节点推到栈上.2.遍历栈,并依次从栈顶弹出元素用相反顺序存储.java代码: // Java program to reverse linked list // usin

顺序栈与链表栈的实现

栈是一种常见的数据结构,它虽然有栈顶和栈底之分,但它只能从一端操作(插入或删除),从而是一种"先进后出"的操作模式.向栈内进数据称为压栈(Push),从栈里取出数据叫出栈(POp).例如压栈顺序为1.2.3.4.5,着出栈的顺序为5.4.3.2.1(只考虑一次性出栈的情况). 栈按照存储的方式,又分为顺序栈和链表栈.顺序栈基于数组实现,所以顺序栈存储数据的内存是连续的,在创建栈时规定好栈的大小,这样对内存的使用效率并不高.而链式栈则是采用了链表来实现,其元素的存储地址是不连续的,而且是

大话数据结构----栈

栈的定义: 栈(stack)是限定尽在表尾进行插入和删除操作的线性表. 从定义中可以看出,栈也是线性表,是一个特殊的线性表,之前说线性的表的时候,线性表可以在任意位置进行插入插入,而栈比线性表特殊的地方的就是不能随意的插入和删除了,栈的插入和删除只能在规定的同一端进行,而被允许插入和删除的一端称为栈顶,另一端称为栈底. 从栈的特性中我们能发现:1).栈是一种后进先出的线性表,因为栈只有一个出入口,每次出栈是最后进的那个先出去,后一个才能出去,就像我们出电梯一样,里面的人被阻住,只有外面的人出去,

java数据结构栈

栈的原则是先进后出,比如一堆摞起来的书,后放上去的会被最先拿到. 栈的特点是每次只允许访问一个元素. 栈是一种抽象出来的数据结构,它的底层存储依赖于数组和链表,下面列出它的两种实现 public interface Stack <T>{ boolean isEmpty(); void clear(); int length(); boolean push(T obj); T pop(); boolean hashNext(); } public class ArrayStack<T>

基本数据结构-栈的实现及其运用

概述:数据结构是用来实现动态集合的方式.动态集合有两个要素,一是动态集合中的元素,二是动态集合上的操作如search(s,k):其中s为给定的集合,k为所要查询的关键字.Insert(s,k),delete,maximun,minimum,successor,predecessor等. 这里介绍几种简单的数据结构:栈,队列,链表,有根树. 一.栈 栈有一定限制的表,元素的插入和删除只能在表头进行,栈虽然缺少鲁棒性,但是更有效,并且很容易应用,栈后进先出.基本的操作包括进栈PUSH,出栈pop,判

基本数据结构 -- 栈详解

栈是一种后进先出的线性表,是最基本的一种数据结构,在许多地方都有应用. 一.什么是栈 栈是限制插入和删除只能在一个位置上进行的线性表.其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不允许插入和删除的另一端叫做栈底(bottom).对栈的基本操作有 PUSH(压栈)和 POP (出栈),前者相当于表的插入操作(向栈顶插入一个元素),后者则是删除操作(删除一个栈顶元素).栈是一种后进先出(LIFO)的数据结构,最先被删除的是最近压栈的元素.栈就像是一个箱子,往里面放入一个小盒子就相当于