首页 > 其他分享 >链栈的定义、初始化、出栈、入栈等操作

链栈的定义、初始化、出栈、入栈等操作

时间:2023-08-27 11:36:28浏览次数:36  
标签:linkStack 出栈 入栈 int void sNode next 链栈


#include <iostream>
using namespace std;


/*链栈的定义*/
typedef struct sNode
{
    char data;
    struct sNode * next;
}sNode;

typedef sNode *linkStack;

/*初始化链栈*/
void initStack_L(linkStack &S)
{
    S=new sNode;
    S->next=NULL;
}


/*建立一个链栈*/
void creatStack_L(linkStack &S,int n)
{
    initStack_L(S);
    for(int i=0;i<n;i++)
    {
        sNode *q=new sNode;
        cin>>q->data;
        q->next=S->next;
        S->next=q;
    }
}


/*销毁链栈*/
void destroyStack_L(linkStack &S)
{
    while(S)
    {
        sNode *q;
        q=S;
        S=S->next;
        delete q;
    }
}

/*求栈长*/
int lengthStack_L(linkStack &S)
{
    sNode *q;
    int count;

    q=S;
    count=0;

    while(q->next)
    {
        count++;
        q=q->next;
    }
    return count;
}



/*入栈*/
void pushStack_L(linkStack &S,char x)
{
    sNode *q=new sNode;
    q->data=x;
    S->next=q;
    q->next=S->next;//此处不用考虑栈满的情况。
}

/*出栈*/
char popStack_L(linkStack &S)
{
    if(S->next==NULL)
    {
        cout<<"Satck Empty!";
    }//此处得考虑栈空的情况。

    sNode *q;
    char e;

    q=S->next;
    e=q->data;
    S->next=q->next;
    delete q;

    return e;
}

void main()
{
    linkStack S;
    creatStack_L(S,6);
    cout<<popStack_L(S)<<endl;
    pushStack_L(S,'a');
    cout<<popStack_L(S)<<endl;
}

 

标签:linkStack,出栈,入栈,int,void,sNode,next,链栈
From: https://blog.51cto.com/u_5173797/7251984

相关文章

  • 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
     #include<iostream>usingnamespacestd;/*顺序栈的定义*/#defineStack_Size100typedefstructsqStack{char*elem;inttop;intstackSize;//栈数组长度}sqStack;/*顺序栈的初始化*/voidinitStack_Sq(sqStack&S){S.elem=ne......
  • c/c++参数入栈顺序和参数计算顺序
    如果大家细心的话应该知道c/c++语言函数参数入栈顺序为从右至左,那么为什么这样呢?来看看两个知识点:参数的计算顺序与压栈顺序。参数入栈顺序c/c++中规定了函数参数的压栈顺序是从右至左,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。参......
  • clang中参数入栈顺序问题
    在clang中,函数调用的参数入栈顺序是从右往左,而在gcc中参数入栈顺序是从左往右。遇到这个问题的场景是现有项目中有一段代码,在gcc下编译后执行是没问题的,但是在clang下执行却一直报错,通过debug后发现,是由于函数参数的入栈顺序不同导致的。问题代码的逻辑类似于以下demo:#include......
  • 出入栈简述
      defgreet(name):print(f'hello{name}!')greet2(name)print(f'gettingreadtosaybey...')bey()defgreet2(name):print(f'Howareyou,{name}')defbey():print('Okbey')greet('......
  • pop 出栈,sorted临时排序,容器类型的数据,zip函数
    divmod(a,b)返回一对商和余数,结果和(a//b,a%b)一致 字典是Python中唯一的映射类型。 Python的源文件以"py"为扩展名,有python.exe解释运行,可在控制台下运行。"pyw"是图形开发用户接口(GUI)文件的扩展名,作为桌面应用程序,这种文件用于开发图形界面的,由pythonw.exe解释......
  • 已知n个数的入栈序列,求一共有多少种出栈序列 (卡特兰数)
    已知\(n\)个数的入栈序列,求一共有多少种出栈序列这个经典问题有两种解法。解法一:设\(f(x)\)为\(x\)个数入栈后,再全部出栈的序列数量假设我们有\(4\)个数\(a,b,c,d\),我们来看\(a\)的出栈顺序.假如\(a\)第一个出栈,那么后面还有\(3\)个数没有出栈,因此方法数是\(f(3)\).假设\(......
  • 火车进出栈序列问题
    火车进出栈序列问题一、枚举进出栈序列方案1到n的数字按照顺序入栈,请你按照字典序从小到大输出前20种可能的出栈方案\(1<=n<=20\)题解:\(dfs\)搜索看到数据范围很容易想到\(dfs\)爆搜枚举我们首先要维护3个状态:栈内的状态准备入栈的数字是什么已经出栈的序列对于每......
  • Linux(CentOS7) c语言编程, 多线程入栈出栈,错误:expected ‘while’ before ‘int’
    在Centos7里,编写多线程的入栈出栈时,出现这样错误提示:图片版: 文字版:[root@CentOs705-xitongbiancheng]#gcc05-24-01.pthread-cancel-pop-push.c-pthread05-24-01.pthread-cancel-pop-push.c:在函数‘func’中:05-24-01.pthread-cancel-pop-push.c:47:1:错误:expected......
  • 2023-03-30-链栈LinkStack的实现
    1#include<stdio.h>2#include<malloc.h>34typedefstructSNode5{6intdata;7structSNode*next;8}SNode,*LinkStack;9//栈的主要操作是在栈顶进行插入和删除,所以将链表的头部看为栈顶最合适10voidinitLinkStack(LinkStackS)//初始化1......
  • 3.5 链栈的表示和实现
    链栈的表示链栈是运算受限的单链表,只能在链表头部进行操作typedefstructStackNode{ SElemTypedata;StructStackNode*next;}StackNode,*LinkStack;LinkSta......