c语言栈的大小
A. C中栈的内存有多大!
栈的内存空间大小是可以自己定义的,没规定多大,但是一个栈段的容量最大为64KB
因为一个栈段最大容量为65536字节,除以1024就是64KB
B. c语言 栈
回答:
1,stacksize记录的就是当前栈的大小。至于为什么你认为它不会变化,是因为你只注意它会+1或者-1.请看代码中的片段:
//进栈
void Push(SqStack *S,int e){
if (S->top-S->base>S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if (!S->base)exit(1);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT; // 进栈操作之后,stacksize从之前的值变为了加上
// STACKINCREMENT之后的值。
}
*S->top++=e;
}//Push
2,那你认为s->base到底指向了哪里呢?你混淆了一个概念。就像你的提问中说的:“假设现在栈的长度是10,单位0-9都有元素,即满栈”。这时,s->base指向的位置是0,而s->top指向的单元却是9,0-9一共多少?请自己算算。
C. C语言中栈内存的大小
需要大块内存只能去堆中分配,堆的作用很单一。栈主要是为了维护函数调用关系。
D. C语言计算栈
#include <stdio.h>
double readnumber(char a[],int *i)//将数字字符转变成相应的数
{
double x=0.0;
int k=0;
while(a[*i]>='0'&&a[*i]<='9')
{
x=x*10+a[*i]-'0';
(*i)++;
}
if(a[*i]=='.')
{
(*i)++;
while(a[*i]>='0'&&a[*i]<='9')
{
x=x*10+a[*i]-'0';
(*i)++;
k++;
}
}
while(k!=0)
{
x=x/10.0;
k=k-1;
}
return x;
}
double yunsuan(char a[])//求一个后缀表达式的值
{
double obst[100],b,c;//操作数栈
int top=0,i=0;
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9')
obst[top++]=readnumber(a,&i);
else if(a[i]==' ') i++;
else if(a[i]=='+')
{
b=obst[--top];
c=obst[--top];
obst[top++]=b+c;
i++;
}
else if(a[i]=='-')
{
b=obst[--top];
c=obst[--top];
obst[top++]=c-b;
i++;
}
else if(a[i]=='*')
{
b=obst[--top];
c=obst[--top];
obst[top++]=b*c;
i++;
}
else if(a[i]=='/')
{
b=obst[--top];
c=obst[--top];
obst[top++]=c/b;
i++;
}
}
return obst[0];
}
int pd(char op)//判断一个字符是不是运算符
{
switch(op)
{
case '+':
case '-':
case '*':
case '/':return 1;
default :return 0;
}
}
int priority(char op)//求运算符的优先级
{
switch(op)
{
case '\0':return -1;
case '(':return 0;
case '+':
case '-':return 1;
case '*':
case '/':return 2;
default:return -1;
}
}
void charge(char a[],char b[])//将中缀表达式转换等价的后缀表达式
{
int i=0,j=0;
char opst[100];
int top,t;
top=0;
opst[top]='\0';
top++;
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9'||a[i]=='.')
b[j++]=a[i];//遇到数字和小数点直接写入后缀表达式
else if(a[i]=='(')//遇到左括号进入操作符栈
{
opst[top]=a[i];
top++;
}
else if(a[i]==')')
{
t=top-1;
while(opst[t]!='(')
{//'('之前出栈
b[j++]=opst[--top];
t=top-1;
}
top--;
}
else if(pd(a[i]))//'+','-','*','/'
{
b[j++]=' ';//用空格分开两个操作数
while(priority(opst[top-1])>=priority(a[i]))
b[j++]=opst[--top];
opst[top]=a[i];
top++;
}
i++;
}
while(top) b[j++]=opst[--top];
}
int main()
{
char a[100],b[100];
double jieguo;
printf("\n\t请输入算术表达式:");
scanf("%s",a);
charge(a,b);
jieguo=yunsuan(b);
printf("\t表达式运算的结果为:%lf",jieguo);
return 0;
}
E. 急求c语言关于堆栈的长度
找本数据结构书,都是最简单的例程代码,真的懒得敲一遍了
F. C语言怎么求顺序栈长度
这是指针相减的特性,指针相减就是两个之间的元素个数。
(unsigned int)S->top - (unsigned int)S->base; // 要得到实际的地址值相减强制转换成整数就行了
G. c语言 更改栈最大空间
H. c语言,关于栈容量,求详细解答
a b c d e f
b d c f e a
以下为栈内变化
a
a b
a
a c d
a
a e f
a
所以最少为 3. A
I. 求教:C语言怎么申请一个栈,栈的容量有多大
栈可以直接用数组实现的,也可以用链表实现,本质上就是可以在一端点插入和删除的数据结构
数组和链表都是非常适合的媒介
数组实现就用malloc申请一块内存,当数组用即可
链表就是头插和头删两种操作,每次也用malloc申请一个节点的内存
(频繁malloc是非常有失效率的,建议一般情况用数组版,或者合理使用内存池)
J. c语言爆栈如何修改
这个栈大小是编译器里的参数,你必须到你的编译环境里找到设置的地方,把上限值调大。
如果你找不到这个设置菜单的话,代码改用堆空间,而不用栈空间,也能实现你的功能的。一般编程的时候,这么大片的连续空间的使用都会选择用堆,而不用栈,因为栈的空间很有限。
使用堆的方法就是调用malloc函数申请空间。