C語言棧的問題,我main函式是想壓入進棧1,2,3,

時間 2021-05-06 00:02:19

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資料區,這一段的資料是受系統保護的,是不允...