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

《数据结构》学习记录(6):链栈

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

《数据结构》学习记录(6):链栈

一、概念

1、链栈

采用链表存储的栈。

二、链栈的基本操作

1、定义链栈

#define elemType char
struct linkStNode
{     
    elemType data;		//数据域
    linkStNode *next;	//指针域
};

2、初始化链栈

void InitStack(linkStNode *&s)
{      
    s = new linkStNode;
    s->next = nullptr;
}

3、销毁链栈

void DestroyStack(linkStNode *&s)
{
    linkStNode *p = s,*q = s->next;
    while (q)
    {	
        delete p;
        p = q;
        q = p->next;
    }
    delete p;	//此时p指向尾结点,释放其空间
}

4、链栈是否为空

bool StackEmpty(linkStNode *s)
{
    return s->next == nullptr;
}

5、进栈

void Push(linkStNode *&s,elemType e)
{      
    linkStNode * p = new linkStNode;
    p->data = e;		//新建元素e对应的结点*p
    p->next = s->next;	//插入*p结点作为开始结点
    s->next = p;
}

6、出栈

bool Pop(linkStNode *&s,elemType &e)
{     
    if (!s->next)		//栈空的情况
        return false;
    linkStNode * p = s->next;			//p指向开始结点
    e = p->data;
    s->next = p->next;		//删除*p结点
    delete p;               //释放*p结点
    return true;
}

7、取栈顶元素

bool GetTop(linkStNode *s,elemType &e)
{      
    if (!s->next)	//栈空的情况
        return false;
    e = s->next->data;
    return true;
}
三、一个例子

 

即“(”符号进栈,如果遇到“)”时获取栈顶元素,对比是否匹配。

bool Match(char exp[],int n)
{     
    linkStNode *st;
    InitStack(st);		      	//初始化栈
    int i = 0; 
    char e;  
    bool match = true; 
      
    while (i < n && match)	//扫描exp中所有字符
    { 
        if (exp[i] == '(')
        {
            Push(st,exp[i]);
        }
        else if (exp[i] == ')') 		//当前字符为右括号
        {      
            if (GetTop(st,e))
            {    
                if (e != '(')	   	//栈顶元素不为'('时表示不匹配
                    match = false;
                else
                    Pop(st,e);    	//将栈顶元素出栈
            }
            else 
            {
                match = false;  	//无法取栈顶元素时表示不匹配
            }
        }
        i++;			//继续处理其他字符
    }
    if (!StackEmpty(st))	
        match = false;
    
    DestroyStack(st);	     	//销毁栈
    return match;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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