C語言關於資料結構佇列的問題高分懸賞各位高手請慢慢看

時間 2021-05-07 20:01:30

1樓:

就幾個明顯的錯誤提一下

1. 函式 enterqueue中

s->queue[s->tear];

這句沒有實際操作,估計應該是 s->queue[s->tear] = x; 用於在佇列最後新增一個新的元素

2. 主函式中,大約21行左右

for(j=0;jtear;j++,p++) // 這裡不可用i作迴圈變數,否則干擾外迴圈i

printf("%d ",*p);

4. deletequeue(l,e);

if(gethead(l,f)==0) // 多了分號

*f=0;

*e=*e+*f;

從語句目的看,是希望從deletequeue和gethead函式中,得到e或者f的地址,但是 1)由於傳遞的是指標的值,所以即使函式中修改了,主函式中無法得到新的地址;2)這兩個函式體中,並沒有設定地址的**,總之,e 和 f 是沒有可操作地址的

5. 最重要一點,沒有看懂解題思路是什麼。

即使按照刪一個節點,再添兩個節點的想法,也應該從佇列的後面開始,這樣間隔相加,並放在後移一個位置上,不至於影響後續計算。而這段程式從前開始修改佇列,那新的節點產生,不就干擾後面的計算了?

所以,建議先說明一下解題思路,這樣便於解決程式中的各種問題。

2樓:

我經過編譯和除錯,發現有些地方,可能存在bug,但沒有理解樓主的思路,不敢貿然改動,只用★標註在下面:

#include

#define queuesize 40

typedef struct squeueseqqueue;

void initqueue(seqqueue *s)int queueempty(seqqueue s)int enterqueue(seqqueue *s,int x)//★x在這個函式中沒有用到!

int deletequeue(seqqueue *s,int *e)

}int gethead(seqqueue *s,int *e)}int numqueue(seqqueue *l,int e)然後是程式**

#include

#include"seqqueue.h"

#include

void main()

}樓主辛苦啦。

3樓:匿名使用者

首先,要肯定同學你有自己的思維。並且把它寫成了一個c程式但是。1.一套 i,j,k,o,p 害我都想罵 **%@#¥&…………*¥

2.能空一下行,邏輯之間縮排一個嗎

3.混沌的**是否要註釋

4.你不是一個合格的記憶體管理者。請先不要亂用指標。

5.解決一個問題。越簡單的方法越奏效。(顯然你想練習一下結構體和指標吧。)

4樓:匿名使用者

說實話,樓主的程式設計習慣讓我很不爽。第一個問題是因為空指標,第一次迴圈就崩掉了,而且幾乎所有的指標都有空指標的問題,並且空指標不是唯一的問題。還有你的邏輯太複雜,我承認我看不懂了……這個程式按照一般的邏輯(不是書上的,我自己想的)根本用不到那麼多變數。

建議樓主先整理一下思路。截圖傳不上去,第一次迴圈時deletequeue函式出錯了,第二個引數時null。

5樓:匿名使用者

程式有點多,一時看不完,不過經過除錯,發現deletequeue(l,e);這裡第一次執行的時候,e沒有賦值。

資料結構c語言描述,資料結構(C語言描述)

include include include define datatype int define maxsize 1000 typedef struct nodebitreenode datatype bt maxsize bitreenode buildbtree datatype bt,in...

C語言資料結構考試,C語言資料結構考試

桐疏蘭 c語言是一門程序導向 抽象化的通用程式設計語言,廣泛應用於底層開發。c語言能以簡易的方式編譯 處理低階儲存器。c語言是僅產生少量的機器語言以及不需要任何執行環境支援便能執行的高效率程式設計語言。 這個考題應是c程式設計和資料結構在一起的 咖啡巷 直接選擇排序等幾種排序方法書上是有介紹的。基本...

C語言資料結構

要求簡單設計一個結點值為整數的佇列的構思,並給出在佇列中插入一或刪除一個結點值的演算法 include include typedef struct node 連結串列資料結構 node node node node creat 建立新連結串列的函式,當輸入的值為0時建立完成 else cycle ...