设为首页 加入收藏

TOP

C语言 栈(链式栈)(二)
2019-08-13 05:39:26 】 浏览:152
Tags:语言 链式
op = temp;        /* 栈顶指针指向新建节点 */
        printf("Please input data");
        scanf("%d", &data);
        pStack.top->data = data;
        pStack.height++;


        return pStack;
    }
}


二、出栈


/* Function: 出栈 */
LinkStack Pop (LinkStack pStack)
{
    StackNode *Second;


   
    if (StackEmpty(pStack) == Empty)    /* 判断栈是否为空 */
    {
        printf("栈为空,无法出栈\n");
        return pStack;
    }
    if (pStack.top == pStack.bottom)    /* 如果出栈的元素为最后一个元素 */
    {
        printf("出栈元素为%d\n", pStack.top->data);
        free(pStack.top);
        pStack.top = pStack.bottom = NULL; /* 栈顶、栈底都指针都置为空 */
        pStack.height--;


        return pStack;
    }
    printf("出栈元素为%d\n", pStack.top->data);
    Second = pStack.top->next;    /* 指向栈顶的前一个元素*/


    free(pStack.top);    /* 释放栈顶节点 */
    pStack.top = Second;/* 将头指针移动到新的栈顶节点 */
    pStack.height--;


    return pStack;
}


出栈时需要判断三种情况,第一种情况:栈为空、第二种情况:栈中只有一个元素、第三种情况:栈中元素大于等于两个


三、判断栈是否为空


/* Function: 判断栈是否为空 */
int StackEmpty (LinkStack pStack)
{
    if (pStack.top == NULL && pStack.bottom == NULL)
    {
        return Empty;
    }
    else
    {
        return Avail;
    }
}


四、遍历栈


/* Function: 遍历栈 自顶到底*/
void DisplyStack (LinkStack pStack)
{
    if (StackEmpty(pStack) == Empty)
    {
        printf("栈为空,无法遍历\n");
        return ;
    }
    printf("栈中元素[");
    while (pStack.top != NULL)
    {
        printf("%d->", pStack.top->data);
        pStack.top = pStack.top->next;
    }
    printf("]\n");
}


五、清空栈


/* Function: 清空栈 */
LinkStack DeletStack (LinkStack pStack)
{
    StackNode *del;


    while (pStack.top != NULL)
    {
        del = pStack.top->next;    /* 栈顶节点的前一个节点 */
        free(pStack.top);        /* 释放节点 */
        pStack.top = del;        /* 栈顶指针移动到新栈顶 */
    }


    return pStack;
}


六、初始化栈顶、栈底指针和栈高度


/* Function: 初始化栈顶、栈底、栈高度*/
LinkStack InitStack (LinkStack pStack)
{
    pStack.top = pStack.bottom = NULL;
    pStack.height = 0;


    return pStack;
}


链式栈实现完整代码


#include <stdio.h>
#include <stdlib.h>
#define Empty 0        /* 栈空 */
#define Avail 1        /* 栈可用 */


typedef struct SNode
{
    int data;
    struct SNode *next;
}StackNode;
typedef struct LStack
{
    StackNode *top;        /* 栈顶指针 */
    StackNode *bottom;    /* 栈底指针 */
    int height;            /* 链式栈高度 */
}LinkStack;


Link

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言 栈(顺序栈) 下一篇链表(单向链表的建立、删除、插..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目