答案:
賀州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
①p0
②p1
③NULL
解析:
p0指向要插入的結(jié)點(diǎn),p1指向要和p0結(jié)點(diǎn)的info進(jìn)行比較的結(jié)點(diǎn),如果找到應(yīng)該插入的位置,p0會(huì)被插入在p1之前,如果沒找到,會(huì)被插入在p1之后。
第一個(gè)if檢查鏈表是否為空,如果為空,直接將p0變?yōu)槭捉Y(jié)點(diǎn)就完成了插入。
while循環(huán)的作用是尋找插入位置,因?yàn)殒湵硪蠼敌颍杂胮1從首結(jié)點(diǎn)開始找,要找到第一個(gè)info小于等于p0結(jié)點(diǎn)的結(jié)點(diǎn)。每次循環(huán)結(jié)束后,p2將指向p1之前的結(jié)點(diǎn),為后面的插入作準(zhǔn)備。
第二個(gè)if檢查之前的while循環(huán)是否找到這樣的結(jié)點(diǎn)。如果沒找到,說明前面從while循環(huán)出來時(shí)p1指向的是尾結(jié)點(diǎn),這時(shí)要將p0插入到鏈表末尾,所以將p0插入到p1之后。p0的后面沒有結(jié)點(diǎn),所以它的link指向NULL,所以第③問填NULL。如果找到了,那么進(jìn)入第三個(gè)if。
第三個(gè)if檢查p1是否剛好為首結(jié)點(diǎn),如果為首結(jié)點(diǎn),說明前的while循環(huán)根本沒進(jìn)去直接就出來了,這時(shí)p1之前沒有結(jié)點(diǎn),p2還沒有指向任何結(jié)點(diǎn),所以還不能使用p2。由于要將p0插入到p1之前,所以必須將p0變?yōu)槭捉Y(jié)點(diǎn),所以第①問填p0。
如果p1不是首結(jié)點(diǎn),進(jìn)行的就是常規(guī)的插入操作了,將p0插入到p1之前,p2之后,所以第②問填p1。注意這里不能填p2-link,因?yàn)檫@里不在第三個(gè)if的else里面,第三個(gè)if出來以后也要經(jīng)過這一步,而之前說了,如果進(jìn)入了第三個(gè)if,p2是不能使用的。
這個(gè)可能是你在第一次執(zhí)行操作的時(shí)候移動(dòng)了指針,而用完后沒有指向開始的位置。只是可能,沒有代碼這個(gè)是說不清的。一行都沒有執(zhí)行說時(shí)不滿足執(zhí)行的條件?!版湵淼牡刂肪湍涿畹淖兓?。一起變化的還有鏈表里的所有數(shù)據(jù)!”這個(gè)很可以就是你第一次用了指針沒有指回該指的地方。
PS:只是猜想。
1、添加頭文件"stdio.h"
2、struct student * creat(void),但是你的main函數(shù)中返回接收卻是用的int*類型。
3、主函數(shù)main應(yīng)當(dāng)明確聲明為void main()
4、最為嚴(yán)重的是:struct student * creat(void) 函數(shù)體中使用了局部變量struct student *head; struct student *p1,*p2; 但是函數(shù)結(jié)束的地方卻要返回這些指針,因此返回的值是無效數(shù)據(jù)。返回時(shí),已經(jīng)不再作用域了,是無效的空間。建議把這些數(shù)據(jù)當(dāng)作輸入?yún)?shù),指針類型的。就可以正確的接收分配的struct student空間以及指針了。
5、struct student * creat(void) 函數(shù)體中,臨時(shí)指針*p1、*p2再函數(shù)返回之前應(yīng)當(dāng)設(shè)置為NULL,避免因?yàn)榫植孔兞康淖饔糜蚪Y(jié)束導(dǎo)致相關(guān)的空間被清除。
總之,我建議把struct student * creat(void)定義修改為:
void creat(struct student **head).
以上內(nèi)容經(jīng)過調(diào)試,可以使用。
==================我的程序,經(jīng)過完整的調(diào)試
#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) /*定義函數(shù),此函數(shù)帶回一個(gè)指向鏈表頭的指針*/
{
struct student *p1,*p2;
n=0;
do
{
p1=(struct student *)malloc(LEN); /*開辟一個(gè)新單元*/
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(); //清除鍵盤緩沖區(qū),避免輸入混淆
getchar(); //等待鍵盤任意輸入,以便觀察運(yùn)算結(jié)果
}
看我的回答怎么樣?
本文題目:C語言函數(shù)的鏈表變量,c語言鏈表的使用
文章鏈接:http://jinyejixie.com/article28/hsojcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、企業(yè)網(wǎng)站制作、建站公司、軟件開發(fā)、服務(wù)器托管、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)