链栈的实现示例

栈的链式实现例子

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED    

#include "ds.h" //for Status,OK ...    

#ifndef ElemType
#define ElemType int /* 数据元素类型默认为 int */
#define ELEMTYPE_TAG
#endif    

///////////////////////////////////////////////////////////
//链栈的存储结构定义
typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;    

typedef LinkList LinkStack; //链栈类型     

///////////////////////////////////////////////////////////
//链栈的基本操作声明    

//构造一个空栈S
Status InitStack(LinkStack &S);
//销毁栈S
Status DestroyStack(LinkStack &S);
//将栈S清空
Status ClearStack(LinkStack &S);
//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(LinkStack S);
//返回栈S中的元素个数
int    StackLength(LinkStack S);
//用e返回栈顶元素
//    前提:栈S存在且不空
Status GetTop(LinkStack S, ElemType &e);
//元素e入栈S
Status Push(LinkStack &S, ElemType e);
//S出栈用e返回出栈元素
//    前提:栈S存在且不空
Status Pop(LinkStack &S, ElemType &e);    

///////////////////////////////////////////////////////////
//链栈的基本操作的实现    

//构造一个空栈S
Status InitStack(LinkStack &S)
{
    // TODO (#1#): 构造一个空栈S,不带头结点
    S=(LinkStack)malloc(sizeof(LNode));
    if(!S) return ERROR;
    S->next=NULL;
    return OK;
    //-------------------------------------
}    

//销毁栈S
Status DestroyStack(LinkStack &S)
{
    // TODO (#1#):销毁栈S,相当于清空栈    // http://www.bianceng.cn
    LinkStack p;
    while(S)
    {
       p=S->next;
       free(S);
       S=p;
    }
    return OK;
    //-------------------------------------
}    

//将栈S清空
Status ClearStack(LinkStack &S)
{
    // TODO (#1#): 将栈S清空,释放所有结点
    LinkStack p,q;
    p=S->next;
    while(p)
    {
       q=p->next;
       free(p);
       p=q;
    }
    S->next=NULL;
    return OK;
    //-------------------------------------
}    

//若栈S为空返回TRUE,否则FALSE
Status StackEmpty(LinkStack S)
{
    // TODO (#1#): 若栈S为空返回TRUE,否则FALSE
    if(S==NULL)
    return 1;
    else
        return 0;
    //-------------------------------------
}    

//返回栈S中的元素个数
int    StackLength(LinkStack S)
{
    // TODO (#1#): 返回栈S中的元素个数
    LinkStack p;
    int x=0;
    p=S->next;
    while(p!=NULL)
    {
       x++;
       pp=p->next;
    }
    return x;
    //-------------------------------------
}    

//用e返回栈顶元素
//    前提:栈S存在且不空
Status GetTop(LinkStack S, ElemType &e)
{
    // TODO (#1#):若栈S不空,则用e返回栈顶元素    if(S==NULL) exit(OVERFLOW);
    e=S->data;
    return OK;
    //-------------------------------------
}    

//元素e入栈S
Status Push(LinkStack &S, ElemType e)
{
    // TODO (#1#): 插入元素e作为新的栈顶
    LinkStack p;
    p=(LinkStack)malloc(sizeof(LNode));
    if(!p)exit(OVERFLOW);
    p->data=e;
    p->next=NULL;
    p->next=S->next;
    S->next=p;
    return OK;
    //-------------------------------------
}    

//S出栈用e返回出栈元素
//    前提:栈S存在且不空
Status Pop(LinkStack &S, ElemType &e)
{
    // TODO (#1#):若栈S不空,则删除栈顶元素用e返回
    if(S==NULL) return ERROR;
    e=S->data;
    SS=S->next;
    return OK;
    //-------------------------------------
}    

#ifdef ELEMTYPE_TAG
#undef ElemType
#undef ELEMTYPE_TAG
#endif    

#endif

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索栈
, return
, c++ 链栈 出错
, 链栈
, next
, null
, s7-200
, stack overflow
, 元素
, status
, todo
, 链式栈
, 带头结点
返回栈
链表实现栈、栈的链表实现、用链表实现栈、c语言用链表实现堆栈、链栈的实现,以便于您获取更多的相关知识。

时间: 2024-09-14 22:04:54

链栈的实现示例的相关文章

abcde-怎样用c实现链栈的算术表达式运算,不得使用stl模板

问题描述 怎样用c实现链栈的算术表达式运算,不得使用stl模板 按照严蔚敏版的书上的算法,用c语言链栈实现,不让使用stl模板,有没有原代码 解决方案 #include""stdio.h"" #include""stdlib.h"" #include""string.h"" #include""math.h"" #define true 1 #de

求高手相助,java数据结构中使用链栈编程实现两个大数相减

问题描述 求高手相助,java数据结构中使用链栈编程实现两个大数相减 求高手相助,急交作业的,java数据结构中使用链栈编程实现两个大数相减,感激不尽. 解决方案 今天已经23号了....已经晚了我就不给你做了..原理思路你这里都有了..节哀

c语言-关于链栈头指针的问题

问题描述 关于链栈头指针的问题 以上为链栈程序(无错),但为什么不能将直接用struct node 定义一个top指针,而要用一个结构体里面放top指针.如果直接用struct node 定义一个top指针那么入栈部分将出错,为何?或者说这两者区别在哪? 解决方案 ** 楼主,注意看你设计的数据结构,如果你用struct node *top 直接指向头的话,那么这个top包含2个内容, 1: int data ; 2: struct node *next ; 这样的话在你操作的时候,不是很方便,

qdskd-怎样用c实现链栈的算术表达式运算,不得使用stl模板

问题描述 怎样用c实现链栈的算术表达式运算,不得使用stl模板 按照严蔚敏版的书上的算法,用c语言链栈实现,不让使用stl模板,有没有原代码 解决方案 http://download.csdn.net/detail/immoyu/3431468 解决方案二: 利用栈实现简单算术表达式求值算术表达式求值(顺序栈实现)

c++ 链栈 出错-c++链栈问题,求大神,大一无力啊

问题描述 c++链栈问题,求大神,大一无力啊 程序运行的时候出错,自己弄了好久不知道怎么办,百度了也不行#include #include using namespace std; enum error_code{success,underflow,overflow}; //定义枚举 char opr[]={'+','-','*','/','(',')','#'}; struct node{ char data0; int data1; node *next; }; int comp[7][7]

c语言-参照网上,自己改用链栈写了个表达式求值的代码出现的问题

问题描述 参照网上,自己改用链栈写了个表达式求值的代码出现的问题 这个代码可以编译运行,但是输入值进行计算的时候就会停止工作 附上代码: 附上代码求指导: #include #include typedef struct rope { char date; struct rope next; } node,*pnode; typedef struct rope2 { char date; struct rope2 *next; } nodes,*pnodes; typedef struct a

数据结构之自建算法库——链栈

本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 链栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:listack.h,包含定义链栈数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef LISTACK_H_INCLUDED #define LISTACK_H_INCLUDED typedef char ElemType; typede

java-关于Java链栈判断回文出现的空指针问题求解答-0-

问题描述 关于Java链栈判断回文出现的空指针问题求解答-0- public boolean isPalindSeq(String str)throws Exception{ if (str == null) { return false; } LinkStack s1=new LinkStack(); int i=0; do{ if(Character.isWhitespace((str.charAt(i)))){ i++; continue; } else{ s1.push(str.char

C++利用链栈实现表达式求值_C 语言

本文实例为大家分享了C++利用链栈实现表达式求值的具体代码,供大家参考,具体内容如下 #include<iostream.h> typedef int Status; typedef char Cstack; #define OK 1 #define ERROR 0 typedef struct StackNode { Cstack data; struct StackNode *next; }StackNode,*LinkStack; Status InitStack(LinkStack &