1樓:匿名使用者
我覺得is_empty
的判定應該是
head->next == null;
而不是head == null;
還有就是,push和pop要修改到head本身,所以傳參要傳入指向head的指標
#include
#include
struct node ;
struct node *chuangjian(void); //建立一個空棧
void push(struct node **head, int x); //壓入棧
void print_stack(struct node *head); //顯示棧裡的元素
int is_empty(struct node *head); //是否是空棧
int top(struct node *head); //返回棧頂
void pop(struct node **head); //出棧
void make_empty(struct node **head1); //確保棧為空棧
int main(void)
print_stack(head);
return 0;
}struct node *chuangjian(void)
head->next = null;
make_empty(&head); //確保此棧為空棧
return head;
}void make_empty(struct node **head) //確保此棧為空棧
else }}
void push(struct node **head, int x)
else
}int is_empty(struct node *head)
int top(struct node *head)
return 0;
}void pop(struct node **head)
else
}void print_stack(struct node *head)
printf("\n");}
崩潰了,c語言問題,為什麼這兩個函式執行出2個完全不同的結果
2樓:匿名使用者
scanf("%lf",&num[cont]);
double型別對應%lf
3樓:匿名使用者
剛用的時候一般都是自動更新的吧
分別寫函式實現初始化棧、入棧、出棧、判斷棧空、判斷棧滿。例如入棧序列為1 2 3 4 5,出棧則為5 4 3 2 1
4樓:達豐
1、初始化棧
/*功能:初始化棧
*函式名:initstack
*返回值:void
*/void initstack(stack *p)2、判斷棧
/*功能:判斷棧為滿
*函式名:isfull
*返回值:為滿——真1,非滿——假0
*/bool isfull(stack *p)else
}3、判斷棧為空
/*功能:判斷棧為空
* 函式名:isempty
*返回值:為空——真1,非空——假0
*/bool isempty(stack *p)else
}4、進棧
/*功能:進棧
*函式名:push
*返回值:成功trun 失敗false
*注:不能為滿,否則進棧失敗
p->buf[++p->top]=data;
return true;//返回成功
}5、出棧
/*功能:出棧
*函式名:pop
*返回值:出棧成功true 失敗false*/bool pop(stack *p,stacktype *pd)*pd=p->buf[p->top--];//優先順序->大於--return true;//出棧成功
}擴充套件資料:主函式:
void main()
num/=2;
}//將二進位制結果取出來
char value=0;
5樓:匿名使用者
資料結構書上不都有麼?
c語言我的理解是當i=1時,show(0),遞迴,if(0>0)不成立,退出,為什麼會有輸出:1 2 3 4 5
6樓:惡靈的加護
當i等於1的時候,show(1-1)就無法繼續,但是show函式後面還有printf,這個時候才輸出1。
之後遞迴呼叫的函式逐層出棧,依次輸出2,3,4,5.
7樓:匿名使用者
理解正確,輸出也正確。只和遞迴機制有關。
show的過程,先安排降級的show工作,再列印自己。
所以列印工作順序就是
show(0)
show(1)'s print1
show(2)'s print2
show(3)'s print3
show(4)'s print4
show(5)'s print5
8樓:匿名使用者
你家窗戶沒有窗紗嗎?咋讓臭蟲子飛進了你的愛機了,看看debug後的**
#include
int show(int i)
int main()
#include
int show(int i)
printf("%d ", i-5);
}printf("%d ", i-4);
}printf("%d ", i-3);
}printf("%d ", i-2);;
}printf("%d ", i-1);
}printf("%d ", i);
return 0;
}int main()
9樓:
這是遞迴,你傳進去一個引數5,那麼5是》0的那麼就show(4)然後輸出5,就這麼一直遞迴到i=1的時候。
輸入1,2,3輸出3,2,1。c語言(關於資料結構,建棧,進棧,出棧) 麻煩幫我看一下我的**為什麼執行不了
10樓:青雲
你這根本就沒有輸出啊
出棧後top也需要減1
11樓:
全是錯啊,是你寫的嗎?
main函式就有錯,一個沒經過初始化的指標,就拿過來用,其它幾個函式也沒呼叫,壓根就沒有建棧,壓棧,出站的過程,就直接輸出一個不確定的指標
initstatck也返回不了你分配的地址,返回的時候指標就被會原棧裡的值恢復到原來的值,可以先了解一下函式呼叫時候的過程,否則理解不了
push 中 s->data[s->top ]; 這句話也不對,也沒有儲存值,應該是s->data[s->top ] = e ;
編寫函式求下列前n項的和,1/2+3/4
12樓:金色潛鳥
**看不清,給你寫一個函式。
#include
int main()
double fun(int n )
return sum;}
求十進位制100轉換成n進位制的c語言程式設計,謝謝!
13樓:匿名使用者
#include
char *fn(int n, int to);//進行n == 0 和 n < 0 的情況處理,static只執行一次
static int i = (n >= 0) ? (buf[0] = '0',0) : (buf[0] = '-',n = -n,1);
//正整數遞迴,進行進位制轉換.
if (n != 0)
return buf;
}int main()
vb程式設計:sum=1–2+3–4+5–6……+99–100,怎樣寫程式設計公式
14樓:匿名使用者
private sub command1_click()dim i, s as integer
for i = 1 to 100
s = s - i * (-1) ^ i
next i
print s
end sub
c語言void函式在main函式中使用的問題
逍遙散士 宣告和呼叫是兩回事,宣告void function void 括號中的void 是告訴編譯器此函式沒有引數,而呼叫時函式名後面的括號裡放時的是引數,你這樣去寫,就相當前面說明了無引數,後面又給它一個引數,程式當然出出錯了,另外呼叫時不寫返回值的型別,因為在宣告時已經寫過了,這可能是編譯器的...
在c語言程式中,被呼叫的函式必須在main函式中定義
這句話是錯的。如果在main 函式中定義函式,那就屬於函式巢狀了,一般不建議函式定義的時候進行巢狀。被呼叫的函式在呼叫之前必須進行宣告,因為所有程式執行是從main 開始的,所以建議宣告在main 之前。 我也不太懂。這句話恐怕是錯誤的。因為函式呼叫,如果被呼叫的函式放到main函式的前面,那麼就會...
C語言指標函式的問題,關於C語言指標函式的使用問題
你這個問題,就是典型的不瞭解編譯過程的人容易犯的錯誤,關於指標和記憶體分配的問題,樓上已經講了很多了,這裡補充一點 你這段 裡 str hello world 這樣的定義,hello world 字串是屬於const char,編譯的時候,會編譯在const資料區,這一段的資料是受系統保護的,是不允...