鱼C论坛

 找回密码
 立即注册
查看: 2143|回复: 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 | 显示全部楼层
可以用链栈
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef char ElemType;  //栈内数据的类型
  4. typedef struct ListStackNode{   //定义栈节点
  5.     ElemType date;
  6.     struct ListStackNode *next;
  7. }StackNode,*ListStack;

  8. //初始化栈
  9. ListStack InitListStack(ListStack S){
  10.     S=(ListStack)malloc(sizeof(StackNode));
  11.     S->next=NULL;
  12.     return S;
  13. }
  14. //进栈操作
  15. int ListStackPush(ListStack S,ElemType e){
  16.     StackNode *s=NULL;
  17.     s=(StackNode*)malloc(sizeof(StackNode));
  18.     s->date=e;
  19.     s->next=S->next;
  20.     S->next=s;
  21.     return 0;
  22. }
  23. int main()
  24. {
  25.     ListStack S=NULL;
  26.     S=InitListStack(S);  //初始化栈
  27.     ElemType x;
  28.     scanf("%c",&x);
  29.     while(x!='\n'){     //输入字符,以回车键结束
  30.         ListStackPush(S,x);  //入栈
  31.         scanf("%c",&x);
  32.     }
  33.     return 0;
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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