答案:
賀州ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
①p0
②p1
③NULL
解析:
p0指向要插入的結點,p1指向要和p0結點的info進行比較的結點,如果找到應該插入的位置,p0會被插入在p1之前,如果沒找到,會被插入在p1之后。
第一個if檢查鏈表是否為空,如果為空,直接將p0變為首結點就完成了插入。
while循環的作用是尋找插入位置,因為鏈表要求降序,所以用p1從首結點開始找,要找到第一個info小于等于p0結點的結點。每次循環結束后,p2將指向p1之前的結點,為后面的插入作準備。
第二個if檢查之前的while循環是否找到這樣的結點。如果沒找到,說明前面從while循環出來時p1指向的是尾結點,這時要將p0插入到鏈表末尾,所以將p0插入到p1之后。p0的后面沒有結點,所以它的link指向NULL,所以第③問填NULL。如果找到了,那么進入第三個if。
第三個if檢查p1是否剛好為首結點,如果為首結點,說明前的while循環根本沒進去直接就出來了,這時p1之前沒有結點,p2還沒有指向任何結點,所以還不能使用p2。由于要將p0插入到p1之前,所以必須將p0變為首結點,所以第①問填p0。
如果p1不是首結點,進行的就是常規的插入操作了,將p0插入到p1之前,p2之后,所以第②問填p1。注意這里不能填p2-link,因為這里不在第三個if的else里面,第三個if出來以后也要經過這一步,而之前說了,如果進入了第三個if,p2是不能使用的。
這個可能是你在第一次執行操作的時候移動了指針,而用完后沒有指向開始的位置。只是可能,沒有代碼這個是說不清的。一行都沒有執行說時不滿足執行的條件。“鏈表的地址就莫名其妙的變化了。一起變化的還有鏈表里的所有數據!”這個很可以就是你第一次用了指針沒有指回該指的地方。
PS:只是猜想。
1、添加頭文件"stdio.h"
2、struct student * creat(void),但是你的main函數中返回接收卻是用的int*類型。
3、主函數main應當明確聲明為void main()
4、最為嚴重的是:struct student * creat(void) 函數體中使用了局部變量struct student *head; struct student *p1,*p2; 但是函數結束的地方卻要返回這些指針,因此返回的值是無效數據。返回時,已經不再作用域了,是無效的空間。建議把這些數據當作輸入參數,指針類型的。就可以正確的接收分配的struct student空間以及指針了。
5、struct student * creat(void) 函數體中,臨時指針*p1、*p2再函數返回之前應當設置為NULL,避免因為局部變量的作用域結束導致相關的空間被清除。
總之,我建議把struct student * creat(void)定義修改為:
void creat(struct student **head).
以上內容經過調試,可以使用。
==================我的程序,經過完整的調試
#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
void creat(struct student **head) /*定義函數,此函數帶回一個指向鏈表頭的指針*/
{
struct student *p1,*p2;
n=0;
do
{
p1=(struct student *)malloc(LEN); /*開辟一個新單元*/
p1-next=NULL;
scanf("%ld,%f",p1-num,p1-score);
if(p1-num==0)
break;
n++;
if(n==1)
*head=p1;
else
p2-next=p1;
p2=p1;
} while(p1-num!=0) ;
p1=NULL;
p2=NULL;
}
void main()
{
struct student *p;
creat(p);
if(p!=NULL)
do
{
printf("%ld %5.1f\n",p-num,p-score);
p=p-next;
}while(p!=NULL);
flushall(); //清除鍵盤緩沖區,避免輸入混淆
getchar(); //等待鍵盤任意輸入,以便觀察運算結果
}
看我的回答怎么樣?
本文題目:C語言函數的鏈表變量,c語言鏈表的使用
文章鏈接:http://vcdvsql.cn/article28/hsojcp.html
成都網站建設公司_創新互聯,為您提供響應式網站、企業網站制作、建站公司、軟件開發、服務器托管、網站策劃
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯