美文网首页
栈结构(C语言)

栈结构(C语言)

作者: 你好667 | 来源:发表于2017-08-25 10:24 被阅读0次
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>

//节点结构
typedef struct Node
{
    int data;               //节点数据域
    struct Node * pNext;    //节点指针域,指向下一个NODE节点地址
}NODE, * PNODE;

//栈结构
typedef struct Stack
{
    PNODE pTop;         //栈的头节点
    PNODE pBottom;      //栈的底节点
}STACK, * PSTACK;

//创建一个栈
void init(PSTACK pS);
//压栈
void push(PSTACK pS,int val);
//判断栈是否为空
bool isEmpty(PSTACK pS);
//出栈
bool pop(PSTACK pS,int * val);
//遍历输出
void traverse(PSTACK pS);

int main(void)
{   
    STACK S;
    int val;

    init(&S);
    push(&S,1);
    push(&S,2);
    push(&S,3);
    push(&S,4);

    traverse(&S);

    if(pop(&S,&val)){
        printf("出栈的元素为%d \n", val);
    }else{
        printf("为空出栈失败 \n");
    }

    traverse(&S);

    return 0;
}

void init(PSTACK pS)        //栈的初始状态,栈的头部等于底部
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    if(pS->pTop == NULL){
        printf("动态开辟内存失败");
        exit(-1);
    }else{
        pS->pBottom = pS->pTop;
        pS->pTop->pNext = NULL;  //指针域为空,表示没有指向下一个节点
    }
}

void push(PSTACK pS,int val)
{
    //首先创建一个新节点
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if(pNew == NULL){
        printf("动态开辟内存失败");
        exit(-1);
    }else{

        pNew->data = val;        //数据域填入数据
        pNew->pNext = pS->pTop;  //指针域指向pTop;
        pS->pTop = pNew;         //新压栈进来的节点放在pTop上
    }
}

void traverse(PSTACK pS)
{   
    PNODE p = pS->pTop;
    while(p != pS->pBottom)     //栈头不等于栈底
    {   
        printf("%d ",p->data);
        p = p->pNext;
    }
    printf("\n");
}

bool isEmpty(PSTACK pS)
{
    if(pS->pTop == pS->pBottom){
        return true;
    }else{
        return false;
    }
}

//出栈一次
bool pop(PSTACK pS,int * val)
{
    if(isEmpty(pS)){
        return false;
    }else{
        PNODE r = pS->pTop;     //要删除的那个先存起来
        * val = r->data;        //要删除值
        pS->pTop = r->pNext;    //下一个变成top
        free(r);
        r = NULL;
        
        return true;
    }
}

相关文章

  • 栈结构(C语言)

  • 动态栈的存储结构及算法C语言实现

    动态栈的存储结构及算法C语言实现

  • C++语言实现顺序栈

    C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了>栈的特点以及介绍了栈的相关操作,并利用C语言...

  • 3. 栈的操作

    1. 栈的操作-c语言实现2. 栈操作的实现-顺序栈和链栈 3. 栈的实现与遍历4. c语言的函数调用栈5. 两个...

  • C语言结构体实现链式栈

    stack(栈)是一中运算受限的线性表,它是先进后出,包含栈顶和栈底,并且只允许在栈顶进行插入删除等操作,...

  • 堆和栈

    在数据结构中堆和栈都是一种数据项按序排列的数据结构,但我们今天所说的重点并不是数据结构中的堆和栈,而是C语言内存分...

  • C语言-数据结构-栈(静态栈与动态栈)

    一.简介 在哔哩哔哩看视频学的,赫斌老师数据结构入门的内容-b站搜索:av6159200(P33),通过学习,能独...

  • C语言栈

    C语言实现简单的栈结构 今天看到一个问题是要交换两个变量的值并且不能使用中间变量,首先想到的方法就是用数学的方法:...

  • 【数据结构】【C#】006-栈:💫链栈

    C#数据结构:链栈 1、自定义链栈结构: 链栈节点类 链栈类 链栈测试用例: 输出结果: 注意: 1、链栈即采用链...

  • 3--4.栈与队列

    [TOC] 写在前面 本篇文章整理《数据结构(C++语言版)》关于栈与队列这种线性结构知识点。整个数据结构部分章节...

网友评论

      本文标题:栈结构(C语言)

      本文链接:https://www.haomeiwen.com/subject/gwqudxtx.html