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函數申請空間。