本文目錄一覽:
- 1、C語言數據結構問題,剛學就不懂了
- 2、高手解答 c語言編寫數據結構實例 下面的代碼看不懂,高手解答
- 3、數據結構C語言版自學完全看不懂
- 4、一道C語言數據結構題,程序已給好,看不懂意思,求給分析。。注釋。。重賞。。。!
C語言數據結構問題,剛學就不懂了
while(p!=NULL)
{p=p-link;++i; //這裡有問題,還沒有訪問數據就直接將指針移到後面節點了;
sum=sum+p-data;} //這個應該寫到上面,另外因為上面的原因可能會導致內存非法操作,如你操作到p指向c的時候,p此時不為NULL,但當你執行p=p-link;後,p就成為NULL了,再訪問p-data就會出錯的。
ave=sum/i;
return ave;}
改為:
while(!p)//從Head開始訪問,直到鏈表結束
{
sum += p-data;//累加數據
i += 1;//計數器加1
p = p-link;//指向下一節點
}
if(i!=0)//若鏈表不為空,返回平均值
return sum/i;
else//若為空鏈表,返回0,主要是避免除0錯誤的發生,Good Luck!
return 0;
高手解答 c語言編寫數據結構實例 下面的代碼看不懂,高手解答
while(i=L.length!compare(*p++,e))
++i;
這個循環就是掃描數組找滿足關係的元素的一個過程,循環條件不用解釋了吧,一個是循環的邊界判斷條件,一個是已知的compare()函數,也就是循環的結束條件;
if(i=L.length)
這個if語句的判斷條件是i=L.length,表示的是上邊的循環式從中間跳出的,也就是找到找到了滿足條件的元素,所以返回該元素的位序i,否則表示上面的循環已超出邊界並且沒有滿足條件的元素,所以返回0;
Status(*compare)(ElemType,ElemType))是個函數指針;
數據結構C語言版自學完全看不懂
鄙人是計算機專業的,假期里,在我預習數據結構的時候也是看不懂。不過可以給你點建議:
1、看不懂,只有硬著頭皮看,把整本書大致的看一遍,然後回頭再看一遍。
2、到開這門課的班級聽課,與其老師溝通,了解那些是重點,那些是了解的知識(有些小節是不用看的)。
3、網上有視頻的,可以下載 《嚴蔚敏老師》 的視頻。
數據結構確實比較難,是計算機考研科目里僅次於數學的一門,有困難是正常的。
相信你是一個自學能力很強的人,祝你學業有成。
一道C語言數據結構題,程序已給好,看不懂意思,求給分析。。注釋。。重賞。。。!
你這個分不太好賺哦…真不好琢磨你哪裡不懂,這就關係到注釋到哪種程度.能幫你理解多少算多少吧.
為了讓你方便看,我們從節點定義和主函數開始.
————————————————
struct slist
{
double s; //用於存儲分數的變數
struct slist *next; //指向下一個節點的指針
};
typedef struct slist STREC //申明節點結構類型
void main()
{
double s[N]={85,76,69,85,91,72,64,87}, max; //這是程序樣本,即所謂N個學生的成績.但這個N是有限的,靜態的,編譯的時候,#define N 8,最多就是8個.這顯然只是用於測試後面處理用的樣本.
STREC *h; //申明了一個節點指針。
此處需要說明一下的是,從這個代碼的操作來看,這個鏈表是先進先出的隊列操作模式,可以通俗的說h是這個隊列的頭。但此處代碼,多用內存存儲了一個0,從某種意義上說,這是不必要的;
h=creat(s);
//建立隊列,將數組中的分數樣本存儲到隊列。參數為數組首地址。
outlist(h);
//展示隊列數據。
max=fun(h);
//調用fun,返回最大的分數值。
printf(“max=%6.1f\n”,max);
//按照指定寬度列印浮點數格式的結果值。
}
————————————————————–
下一個,按順序來看,建立隊列。
STREC *creat( double *s) //返回隊列頭的地址(指針)。參數為指向雙精度數據變數的指針。
{
STREC *h,*p,*q; //此處說明:h存放隊列頭地址,p存放當前訪問隊列節點地址(已經進入隊列,或者說當前隊列尾節點地址),q存放新增節點的地址(還沒有進入隊列);
int i=0; //初始化循環增量
h=p=(STREC*)malloc(sizeof(STREC)); //為隊列頭分配空間,並用指針變數記錄隊列頭地址。可以認為,當前只有一個節點,既是頭,也是尾;
p-s=0; //隊列頭節點中分數變數賦值為0。這是可以不這樣做的。
while(iN) //從第0個數據開始存儲,一直到第N-1個數據,共計存儲N個數據,將數據存儲完成後退出循環
{
q=(STREC*)malloc(sizeof(STREC)); //為新節點數據分配空間,首地址保存在q中
q-s=s[i]; //將數組中第i個對應分數數據存入新節點對應位置。
i++; //循環變數自增1
p-next=q; //將新節點鏈接到隊列尾。或者說,當前隊列尾的下一個節點是上面構造的那個節點;
p=q;///重新記錄或者說更新隊列尾
}
p-next=0; //此處對於這種用法不發表看法;意思是,最終形成的隊列「尾節點的下一個節點不存在」,就是表示隊列生成完畢,此時p就是真正的隊列尾,後面再也沒有其它節點了。
return h; //將隊列頭地址返回
}
———————————————-
下一個展示隊列
void outlist(STREC *h)
{
STREC *p; //申明存放節點地址的指針標量
p=h-next; //取得隊列中第二個節點的地址。因為在構造時,第一個節點中的分數數據是0,所以,從第二個開始列印。
printf(“head”); //開始做列印提示
do
{
printf(“-%2.0f”,p-s); //按照定製格式列印當前節點中的分數值
p=p-next; //取得下個節點的地址
}
while(p!=0) ; //隊列沒有列印完的話,繼續。此處用法不算標準用法。當然,原理上沒有問題。
printf(“\n\n”);
}
————————————————————————————-
最後一個
double fun( STREC *h ) //在隊列中,找到最大的分數值
{
double max; //申明存放最大分數數據的變數
STREC *q=h; //申明指向隊列的指針變數
max=h-s; //用隊列頭中的數據初始化最大分數值。即:max=0;
do
{
if(q-smax) //用隊列中的當前節點(其實是每一個節點)中的數據與當前MAX(目前選出的最大數)做比較。包括隊列頭重的那個’0『,即第一次比對的時候,是if(00).
max=q-s; //總是存放比較大的那個數
q=q-next; //取隊列中下一個節點
}
while(q!=0); //隊列沒有遍歷完的話,繼續
return max; /隊列遍歷完成,返回最大的那個數
}
——————–
希望能夠幫到你!
—
天啊,我早上打開樓主這個求助,我以為可能回答的人不會太多,由於我還在忙,途中吃了個飯,才慢慢過來寫,結果…不過我比較了下,還是我寫的要詳細些。(一樓有點暈,估計他以後自己看了都會笑自己), 最重要的是,大家能幫到你,就OK了!
原創文章,作者:OPKR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137584.html