解题思路:
栈的基本操作中的初始化,入栈和出栈
注意事项:
见 代码
参考代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#include <stdlib.h>


typedef char erElemType;

typedef int ElemType;


typedef struct Stack {

erElemType date[200];

ElemType Top0,Top;//Top0可以理解为栈头,另一个为栈尾

}Stack;


void Init_Stack(Stack& S)

{

    S.Top = -1;//这里若=0,需将上方变为date[201]

    S.Top0 = -1;

}


void Delete(Stack &S)

{                                 //#的作用

    if(S.Top!=1)//防止指针漂移

    S.Top-=2;//回退两格,即S.Top=S.Top-2;

}


void All_Delete(Stack& S)

{                             //@的作用

    S.Top = -1;//直接将栈尾回到栈头

}


void Print_Stack(Stack S)

{

    while (S.Top0 != S.Top)//防止指针漂移

    {

        printf("%c", S.date[++S.Top0]);//先自加后赋值,从数组下标从0开始计数

    }

    printf("\n");

}


int main()

{

    Stack S;

    erElemType c;//char型

    Init_Stack(S);//初始化

    c=getchar();输入一个字符

    while (c != EOF)

    {

        while (c != EOF&&c !='\n')

        {

            S.date[++S.Top] = c;

            if (c == '#')

            Delete(S);

            if (c == '@')

            All_Delete(S);

            c = getchar();

        }

        Print_Stack(S);

        All_Delete(S);//打印完后要将栈尾指回栈头

        c = getchar();

}

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论