当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

链栈的实现

发表于: 2013-04-28   作者:chinrui   来源:转载   浏览次数:
摘要: #include <iostream> #include <stdlib.h> using namespace std; typedef int Elemtype; typedef struct Node { Node *lNext; Elemtype eData; } *LinkedStack; //函数声明 LinkedSt
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef int Elemtype;
typedef struct Node {
    Node *lNext;
    Elemtype eData;
} *LinkedStack;

//函数声明
LinkedStack initNode();
void showStack(LinkedStack);
void initStack(LinkedStack , int);
int stackLength(LinkedStack);
bool isEmptyStack(LinkedStack);
Elemtype getTop(LinkedStack);
void push(LinkedStack , Elemtype);
Elemtype pop(LinkedStack);
void clearStack(LinkedStack);

int main()
{
    LinkedStack ls = initNode();
    cout << "输入要初始化栈空间的元素个数:" << endl;
    int iSize;
    cin >> iSize;
    cout << "输入各个元素值:" << endl;
    initStack(ls , iSize);
    cout << "栈内元素有:" << endl;
    showStack(ls);

    //测试求栈空间元素个数函数
    //cout << "栈空间元素个数为:" << stackLength(ls) << endl;

    //判断栈空间是否为空
    /*bool bEmpty = isEmptyStack(ls);
    if(bEmpty) {
        cout << "栈空间里面没有任何元素!" << endl;
    } else {
        cout << "栈非空!" << endl;
    }*/

    //测试获取栈顶元素
    /*Elemtype eReturn = getTop(ls);
    cout << "栈顶元素为:" << eReturn << endl;*/

    //测试入栈函数
    /*Elemtype eValue;
    cout << "输入要入栈的元素值:" << endl;
    cin >> eValue;
    push(ls , eValue);
    cout << "入栈后,栈空间元素值为:" << endl;
    showStack(ls);*/

    //测试出栈函数
    Elemtype eDelete = pop(ls);
    cout << "被删除元素为:" << eDelete << endl;
    cout << "栈空间剩余元素:" << endl;
    showStack(ls);

    //测试置空栈
    cout << "置空栈……" << endl;
    clearStack(ls);
    showStack(ls);

    return 0;
}

//初始化结点
LinkedStack initNode() {
    LinkedStack lReturn = (LinkedStack)malloc(sizeof(Node));
    lReturn->lNext = NULL;
    return lReturn;
}

//初始化栈
void initStack(LinkedStack lHead , int iSize) {
    if(lHead->lNext != NULL) {
        lHead->lNext = NULL;
    }
    for(int i = 0; i < iSize; i++) {
        Elemtype eValue;
        cin >> eValue;
        push(lHead , eValue);
    }
}

//求栈空间元素个数
int stackLength(LinkedStack lHead) {
    int length = 0;
    while(lHead->lNext != NULL) {
        length++;
        lHead = lHead->lNext;
    }
    return length;
}

//显示栈空间所有值
void showStack(LinkedStack lHead) {
    if(isEmptyStack(lHead)) {
        cout << "栈空间里面没有元素!" << endl;
        return;
    }
    lHead = lHead->lNext;
    while(lHead != NULL) {
        cout << lHead->eData << "  ";
        lHead = lHead->lNext;
    }
    cout << endl;
}

//判断栈空间是否为空
bool isEmptyStack(LinkedStack lHead) {
    if(lHead->lNext == NULL) {
        return true;
    }
    return false;
}

//读取栈顶元素
Elemtype getTop(LinkedStack lHead) {
    if(isEmptyStack(lHead)) {
        cout << "栈空间没有任何元素!" << endl;
        return -1;
    }
    return lHead->lNext->eData;
}

//入栈
void push(LinkedStack lHead , Elemtype eValue) {
    LinkedStack lNew = initNode();
    lNew->eData = eValue;
    lNew->lNext = lHead->lNext;
    lHead->lNext = lNew;
}

//出栈
Elemtype pop(LinkedStack lHead) {
    if(isEmptyStack(lHead)) {
        cout << "栈空间没有任何元素!" << endl;
        return -1;
    }
    LinkedStack lDelete = lHead->lNext;
    lHead->lNext = lDelete->lNext;
    Elemtype eReturn = lDelete->eData;
    free(lDelete);
    return eReturn;
}

//置空栈
void clearStack(LinkedStack lHead) {
    if(isEmptyStack(lHead)) {
        return;
    }
    while(!isEmptyStack(lHead)) {
        LinkedStack lDelete = lHead->lNext;
        lHead->lNext = lDelete->lNext;
        free(lDelete);
    }
}

//销毁栈
void destoryStack(LinkedStack lHead) {
    clearStack(lHead);
    free(lHead);
}

链栈的实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
栈的Java实现--链栈 链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表
在JavaScript中,有三种常见的链式结构:原型链(Prototype Chain),调用栈(Call Stack),作用域链(Scope
Java中允许对异常进行再次抛出,以提交给上一层进行处理,最为明显的例子为Java的常规异常。 常规异
栈的Java实现--顺序栈 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按
栈的定义:(特殊的线性表)   仅在表的一端进行插入和删除的线性表。允许插入、删除的这一端称为
栈是一种先进后出的数据结构. 栈的基本操作包括:入栈,出栈,初始化栈,清空栈,遍历栈. C代码如下: 1 #
栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。 (1)通常称插入、删除的这一
栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。 (1)通常称插入、删除的这一
//利用链表构建栈。 //输入1 2 3 4 5 0时输出 5 4 3 2 1 #include<stdio.h> #include<stdl
一、 栈 1、概念 栈是一种特殊的线性表,它只能在栈顶(top)进行插入(push)和删除(pop)操作。   栈
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号