qq_39226270
qq_39226270
采纳率100%
2017-06-20 07:42

堆栈顺序栈的运用。能不能在我给的基础上修改

100
已采纳

/*设计一个简单的文字编辑器,使其具有删除打错字符的功能*/
/*约定:@表示删除前面一个字符,#表示删除前面所有字符,$表示编辑结束*/
#include
#define maxsize 64
typedef struct
{
void* data[maxsize];
int top;
}seqstack;

void SETNULL(seqstack *s){

s->top=-1;printf("cei1\n");printf("%d",s->top);

}

int EMPTY(seqstack *s){
printf("cei10\n");

if(s->top>=0)
    return 0;
else
    return 1;

}

char POP(seqstack *s)
{ printf("cei2\n");

if(EMPTY(s))
{
    printf("underflow");
    return NULL;}
else
{
    s->top--;
    return(s->data[s->top+1]);
}

}

seqstack *PUSH(seqstack *s,char x){
printf("cei3\n");

int i;
if(s->top==maxsize-1)
{
    printf("overflow");
    return NULL;
}
else
{

 s->top++;
  s->data[s->top]=x;
}
return s;

}

void shuchu(seqstack *s){
printf("cei4\n");

int i=-1;
printf("字符为\n");
while(i!=s->top){
    printf("%s\t",s->data[i+1]);
    i++;
}

}

void EDIT(seqstack *s)
{
char c;

SETNULL(&s);    printf("cei5\n");

c=getchar();

while(c!='$')
{

    if(c=='@') {
        POP(&s);    printf("cei6\n");

    }
    else if(c=='#') {
            SETNULL(&s);    printf("cei7\n");

    }
    else {printf("1%d",s->top);
            PUSH(&s,c);    printf("cei8\n");

    }
    getchar();
    shuchu(&s);    printf("cei9\n");

    c=getchar();

}

}

void main()
{

seqstack *s;
EDIT(s);

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • s_listening s_listening 4年前

    改动可以实现功能:
    你打log的代码没有删掉

    /*设计一个简单的文字编辑器,使其具有删除打错字符的功能*/
    /*约定:@表示删除前面一个字符,#表示删除前面所有字符,$表示编辑结束*/
    #include <stdio.h>
    
    #define maxsize 64
    typedef struct
    {
        char data[maxsize];
        int top;
    }seqstack;
    void SETNULL(seqstack *s) {
        s->top = -1; printf("cei1\n"); printf("%d", s->top);
    }
    int EMPTY(seqstack *s) {
        printf("cei10\n");
        if (s->top >= 0)
            return 0;
        else
            return 1;
    }
    char POP(seqstack *s)
    {
        printf("cei2\n");
        if (EMPTY(s))
        {
            printf("underflow");
            return NULL;
        }
        else
        {
            return s->data[s->top--];
        }
    }
    seqstack *PUSH(seqstack *s, char x) {
        printf("cei3\n");
        int i;
        if (s->top == maxsize - 1)
        {
            printf("overflow");
            return NULL;
        }
        else
        {
    
            s->top++;
            s->data[s->top] = x;
        }
        return s;
    }
    void shuchu(seqstack *s) {
        printf("cei4\n");
        int i = -1;
        printf("字符为\n");
        while (i != s->top) {
            printf("%c", s->data[i + 1]);
            i++;
        }
        printf("\n");
    }
    void EDIT(seqstack *s)
    {
        char c;
        SETNULL(s);    printf("cei5\n");
    
        c = getchar();
    
        while (c != '$')
        {
    
            if (c == '@') {
                POP(s);    printf("cei6\n");
    
            }
            else if (c == '#') {
                SETNULL(s);    printf("cei7\n");
    
            }
            else {
                printf("1%d\n", s->top);
                PUSH(s, c);    printf("cei8\n");
    
            }
            getchar();
            shuchu(s);    printf("cei9\n");
    
            c = getchar();
    
        }
    }
    void main()
    {
        seqstack *s = new seqstack;
        EDIT(s);
    } 
    
    点赞 评论 复制链接分享
  • s_listening s_listening 4年前

    改成C风格的申请释放内存了
    刚刚我的忘记释放内存了。
    malloc我不熟悉,应该没写错。你可以找找看博客

    /*设计一个简单的文字编辑器,使其具有删除打错字符的功能*/
    /*约定:@表示删除前面一个字符,#表示删除前面所有字符,$表示编辑结束*/
    #include <stdio.h>
    #include <stdlib.h>
    
    #define maxsize 64
    typedef struct
    {
        char data[maxsize];
        int top;
    }seqstack;
    void SETNULL(seqstack *s) {
        s->top = -1; printf("cei1\n"); printf("%d", s->top);
    }
    int EMPTY(seqstack *s) {
        printf("cei10\n");
        if (s->top >= 0)
            return 0;
        else
            return 1;
    }
    char POP(seqstack *s)
    {
        printf("cei2\n");
        if (EMPTY(s))
        {
            printf("underflow");
            return NULL;
        }
        else
        {
            return s->data[s->top--];
        }
    }
    seqstack *PUSH(seqstack *s, char x) {
        printf("cei3\n");
        int i;
        if (s->top == maxsize - 1)
        {
            printf("overflow");
            return NULL;
        }
        else
        {
    
            s->top++;
            s->data[s->top] = x;
        }
        return s;
    }
    void shuchu(seqstack *s) {
        printf("cei4\n");
        int i = -1;
        printf("字符为\n");
        while (i != s->top) {
            printf("%c", s->data[i + 1]);
            i++;
        }
        printf("\n");
    }
    void EDIT(seqstack *s)
    {
        char c;
        SETNULL(s);    printf("cei5\n");
    
        c = getchar();
    
        while (c != '$')
        {
    
            if (c == '@') {
                POP(s);    printf("cei6\n");
    
            }
            else if (c == '#') {
                SETNULL(s);    printf("cei7\n");
    
            }
            else {
                printf("1%d\n", s->top);
                PUSH(s, c);    printf("cei8\n");
    
            }
            getchar();
            shuchu(s);    printf("cei9\n");
    
            c = getchar();
    
        }
    }
    void main()
    {
        seqstack *s; 
        s = (seqstack *)malloc(4 * maxsize + 4);
        EDIT(s);
        free(s);
    } 
    
    点赞 评论 复制链接分享
  • s_listening s_listening 4年前

    话说贴代码好好贴不行啊 头文件被吞了,复制都不好复制。

    点赞 评论 复制链接分享

相关推荐