栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【郝斌老师数据结构学习笔记 day 7】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【郝斌老师数据结构学习笔记 day 7】

目录

前言

一、栈的定义

二、栈的分类

三、栈的一些算法 

四、栈的日常应用 

总结


前言

数据结构的学习笔记,记录第七天


一、栈的定义

定义:一种可以实现 “先进后出” 的存储结构

           栈类似于箱子


二、栈的分类

分类:

        静态栈

        动态栈


三、栈的一些算法 

算法:

        栈的初始化

        出栈

        入栈

        清空栈中全部元素

        判断栈是否为空

        遍历栈中元素

(上述算法实现代码如下,附详细注释)

#include 
#include    //里面包含exit函数
#include    //里面包含malloc函数
#include   //里面包含bool函数

typedef struct Node     //定义一个链表的数据类型
{
    int data;           //数据域
    struct Node * pNext;//指针域
}NODE,* PNODE;

typedef struct Stack   //定义一个栈的数据类型
{
    PNODE pTop;         //头指针域
    PNODE pBottom;      //尾指针域
}STACK,* PSTACK;

void initStack();
void pushStack();
void traverseStack();
bool pop();
void clear();

int main()
{
    STACK S;            //STACK 等价于 struct Stack
    int val;            //保存出栈元素

    initStack(&S);        //函数功能:初始化栈
    pushStack(&S,1);        //函数功能:压入元素入栈
    pushStack(&S,2);
    pushStack(&S,3);
    pushStack(&S,4);
    pushStack(&S,5);
    pushStack(&S,6);
    traverseStack(&S);
    //clear(&S);

    if(pop(&S,&val))        //弹出栈元素
    {
        printf("出栈成功,出栈的元素是%dn",val);
    }
    else
    {
        printf("出栈失败!n");
    }
    traverseStack(&S);    //遍历输出栈中元素

    return 0;
}

void initStack(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    if(NULL == pS->pTop)
    {
        printf("动态内存分配失败!n");
        exit(0);
    }
    else
    {
        pS->pBottom = pS->pTop;
        pS->pTop->pNext = NULL;     //pS->Bottom->pNext = NULL;
    }
}

void pushStack(PSTACK pS, int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));

    pNew->data = val;
    pNew->pNext = pS->pTop;            //pS->Top不能改成pS->Bottom
    pS->pTop = pNew;

    return;
}

void traverseStack(PSTACK pS)
{
    PNODE p = pS->pTop;

    while(p != pS->pBottom)
    {
        printf("%d ",p->data);
        p = p->pNext;
    }
    printf("n");

    return;
}

//判断栈是否为空
bool empty(PSTACK pS)
{
    if(pS->pTop == pS->pBottom)
        return true;
    else
        return false;
}

//把pS所指向的栈出栈一次,并把在、出栈元素存入pVal形参所指向的变量中,如果出栈成功返回true,出栈失败则返回false
bool pop(PSTACK pS,int* pVal)
{
    if(empty(pS))        //pS本身存放的就是S的地址
    {
        return false;
    }
    else
    {
        PNODE r = pS->pTop;
        pS->pTop = r->pNext;
        *pVal = r->data;
        free(r);
        r = NULL;

        return true;

    }
}

//clear清空栈中所有元素
void clear(PSTACK pS)
{
    if(empty(pS))
    {
        return;
    }
    else
    {
       PNODE p = pS->pTop;
       PNODE q = NULL;

       while(p != pS->pBottom)
       {
           q = p->pNext;
           free(p);
           p = q;
       }
       pS->pTop = pS->pBottom;
    }
}

exit()函数

包含在头文件:stdlib.h中

功能:为退出程序的函数

用法:

       exit(1);  为异常退出     只要括号内数字不为0都表示异常退出

       exit(0);  为正常退出

注意:括号内的参数都将返回给操作系统;

          return() 是返回到上一级主调函数,不一定会退出程序; 


四、栈的日常应用 

应用:

        函数应用

        中断

        表达式求值

        内存分配

        缓冲处理

        迷宫


总结 

日进一寸,继续加油。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号