c語言壓棧
A. c語言,壓棧函數的形參為什麼一定是指針,如果不是就改變不了棧的值。就一下函數解釋一下
您說對了,不是指針就改變不了值,是這樣的:
主函數的內存空間和函數的內存空間是分開的,在函數中對傳來的值進行操作
因為存在不一樣,所以,函數中的操作和主函數中的這個不聯系,沒有影響,
但是你想如果是指針,指針指向內存空間,雖然函數和主函數中的指針存在了不同的空間,但他們的值相同,就是指向的空間是一個地方,對指向空間的值改變,那是不是主函數中指向的那個值也變了,但是主函數傳入的指針值你在函數中怎麼操作,主函數中的值也不變哦。
B. 在c語言里,參數的壓棧和出棧分別是什麼意思
壓棧是進棧,把元素放到棧裡面;出棧,把元素從棧中取出。
棧是先進後出。舉個例子,一個裝羽毛球的筒子,一邊能開一邊不能開,1號球先進去,到筒子底部(進棧)。然後2號球接著進去,在你不拿出2號球的情況下,你是無法拿走1號球。而拿走球的操作就是出棧咯
C. C語言中函數參數壓棧方式為什麼是從右到左
棧是先入後出的數據結構.
函數參數從右到左, 那麼到函數內部出棧的時候就是從左到右的順序了.
對於普通函數無區別. 但對於可變參函數, 會根據左側參數來決定共計有多少參數, 每個類型是什麼.
比如 printf scanf這類的.
於是 就設計成從右到左的壓棧方式了.
D. C語言函數壓棧順序
基本正確,補充一點,參數一般是往寄存器裡面放,放不下的情況下,才壓棧。
E. C語言壓棧函數總是寫不對
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
structnode{
char*name;
structnode*next;
};
voidpush(constchar*);
char*pop();
staticintcount=1;
char*s;
structnode*head=NULL,*tail=NULL;
intmain(){
charoperation[5],name[21],*answer;
printf("QBQBQ~ ");
while(scanf("%s",operation)!=EOF)
if(strcmp(operation,"p")==0){
scanf("%s",name);//蛋疼的輸入
push(name);
}
else{
answer=pop();
if(answer==NULL){
printf("Queue_empty! ");
}
else{
printf("%s ",answer);
}
}
return0;
}
voidpush(constchar*s){
structnode*new=(structnode*)malloc(sizeof(structnode));
new->name=(char*)malloc(20);
strcpy(new->name,s);
if(count==1){
tail=head=new;
new->next=NULL;
}
else{
new->next=head;
head=new;
}
count++;
}
char*pop(){
structnode*temp=head;
if(NULL==head){
returnNULL;
}
while(temp->next!=tail){
temp=temp->next;
}
s=tail->name;
tail=temp;
temp->next=NULL;
returns;
}
F. c語言關於棧的問題
首先你題目沒理解正確
(1)如果字元串中的應匹配的左括弧和右括弧不是同一類型,輸出wrong
就是([123)這種應該輸出wrong,而不是missing right
其次你的思路不太對,既然知道這題是考你棧結構的你就應該用棧解決啊,給你幾個提示:
1、這題只用一個數組作為棧的物理空間就夠了(當然還要有個char數組存放輸入)
2、這題你用不著保存數字和右括弧
3、絕大多數match以外的字元串不用掃描全就可以輸出了,不然就算不WA可能要TO了
4、push pop peek這三種棧的操作都要用上
(演算法思路,想獨立完成就別看)
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
從左往右掃描字元串
遇到左括弧壓棧
遇到右括弧去和棧頂匹配
棧已經空了沒棧頂: miss left
匹配成功:彈出棧頂繼續掃描
匹配不成功:wrong
遇到字元結尾
棧空了:match
否則:miss right
遇到其他數字啥的忽略掉
G. c語言中棧的定義
保存數據之用,先壓棧最後出棧,不要與系統關鍵字同名就OK
H. c語言中函數遞歸調用中的壓入堆棧是什麼意思啊
我通俗點說:棧這個東西,你可以想像成手槍的彈夾,你裝入子彈後,最後裝入的子彈一定是最先打出去的,對吧?這就是棧的先進後出原則。遞歸函數,你想想,一定是最後執行的函數最先執行完,然後執行倒數第二個...以此類推。壓入棧的意思就是現在內存給你一個彈夾,函數就是你的子彈,你把沒運行一次這個函數,就是向彈夾里裝了一個子彈,這就是壓棧。出棧就是當找到遞歸函數出口後,再倒著一個一個解決剛才一大堆的函數,就像手槍吧子彈一個一個在打出去。關於棧,建議你學學匯編,一下就明白了
I. C語言的壓棧 和入棧 出棧什麼意思 啊 誰有什麼好方法理解一些
棧的特點是先進後出。 你把棧當成一個水桶,把書一本本放進去,然後最先放的書就被壓在最下面,所以最先進去的,最後出來。 壓棧就是入棧就是把書放進水桶,出棧就是把書拿出來。
J. C語言中函數參數壓棧方式為什麼是從右到左的
因為有些是不定參數的
這樣函數內 在處理的時候 從左到右 會更方便。
根據前面的參數 來確定後面還有多少參數 這樣。
要函數內部彈棧從左到右
那麼壓棧就只能從右到左了。