鱼C论坛

 找回密码
 立即注册
查看: 2648|回复: 1

如何让栈的空间可以无限扩容(realloc)

[复制链接]
发表于 2019-3-17 17:33:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想一直输入字符 比如说几百个几千个?假设内存是足够的
#define STACK_INIT_SIZE 30
#define STACKINCREMENT 20

void Push(sqStack *s, ElemType e)
{
        if ((s->top) - (s->base) >= (s->StackSize))
        {
                s->base = (ElemType*)realloc(s->base, (s->StackSize + STACKINCREMENT) * sizeof(ElemType));
                if (s->base == NULL)
                {
                        exit(0);
                }
        }
        *(s->top) = e;
        s->top = s->top + 1;
        s->StackSize = s->StackSize + STACKINCREMENT;
}


while (c != '\n')
{
        Push(&s, c);
        scanf("%c", &c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-22 21:30:15 | 显示全部楼层
可以用链栈
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;  //栈内数据的类型
typedef struct ListStackNode{   //定义栈节点
    ElemType date;
    struct ListStackNode *next;
}StackNode,*ListStack;

//初始化栈
ListStack InitListStack(ListStack S){
    S=(ListStack)malloc(sizeof(StackNode));
    S->next=NULL;
    return S;
}
 //进栈操作
int ListStackPush(ListStack S,ElemType e){
    StackNode *s=NULL;
    s=(StackNode*)malloc(sizeof(StackNode));
    s->date=e;
    s->next=S->next;
    S->next=s;
    return 0;
}
int main()
{
    ListStack S=NULL;
    S=InitListStack(S);  //初始化栈
    ElemType x;
    scanf("%c",&x);
    while(x!='\n'){     //输入字符,以回车键结束
        ListStackPush(S,x);  //入栈
        scanf("%c",&x);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表