鍊錶初嘗試 鍊錶的構建與輸出 指標

2021-07-11 01:42:11 字數 2465 閱讀 6792

參考:鍊錶基本操作的實現

**:

//鍊錶creat and output

#include

#include

#define len sizeof(struct student)

struct student

;int n;//統計節點數

struct student*creat(void)//返回乙個指向煉表頭的指標

//(4)end

p2->

next

=null;//最後的乙個節點的next置空

p1=null;

p2=null;

return(head);//返回struct student型別的頭指標

} void print(struct student*head)

}}int main()//主函式呼叫頭指標

一.用c語言實現乙個鍊錶的操作,首先定義乙個結構體作為節點,開闢節點的空間就需要用到stdlib庫里的malloc,使用malloc的時候,需要指明開闢空間的大小,我這裡define乙個len(1)為乙個結構體節點的大小,malloc開闢完以後返回的是void型別的指標,這裡我們強制轉換成結構體節點型別(2)

(1)#define len sizeof(struct student)

(2)p1=p2=(struct student *)malloc(len);//malloc返回乙個指向新開闢空間的指標

二.定義creat函式的型別為:struct student*,定義乙個頭指標head指向單鏈表的首部(不要忘記對頭指標的操作,比如置null),定義p1,p2(1)。其中p1的功能是在「第一時間來到」新開闢的節點處,輸入該節點的值(2)。而p2則慢慢吞吞的走在p1後面,完成連線節點的作用(3),但是雖然p2走的很慢,它始終跟在p1的後面:

(1)struct student *p1,*p2;//指標型別:struct student

(2)p1=(struct student *)malloc(len);//p1繼續向下乙個節點移動scanf("%ld%lf",&p1->num,&p1->score);//輸入下一節點的資料

(3)if(n==1)head=p1;//開始時頭指標指向首節點else p2->next=p1;//每乙個節點含有乙個指向下乙個節點的指標

(4)p2=p1;//移動p2到p1的位置,準備進行對下乙個節點的操作(準備操作現在的這個節點的next指向下乙個節點)

三.當p1走到絕路時,(即輸入的是結束的象徵0 0),p2不會跟著傻,它會懸崖勒馬。

p2->next=null;//最後的乙個節點的next置空

p2->next的置空象徵著鍊錶構建的結束。

構建部分**:

struct student*creat(void)//返回乙個指向煉表頭的指標 

//(4)end

p2->

next

=null;//最後的乙個節點的next置空

p1=null;

p2=null;

return(head);//返回struct student型別的頭指標

}

void print(struct student*head)}}

傳入頭指標,定義乙個指標p,將鍊錶的首位址賦值給p(p=head),然後輸出當前指向的節點的儲存值,然後指向下乙個節點,不斷的往復。最後當它遇見「懸崖」時「勒馬」。

指標與鍊錶

指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int long和double。指標也可以是void型別 null指標和未初始化指標。根據出現的位置不同,操作符 既可以用來宣告乙個指標變數,也可以用作指標的取值。當用在宣告乙個變...

指標與鍊錶

真正有用的動態變數很少會是int,double這樣的簡單型別.相反都是一些複雜型別,比如陣列,結構體,或類.結構體或類型別的動態變數通常由乙個或多個成員變數,這些變數是指標,可將動態變數連線到其它動態變數.一.節點 在c 中,節點作為結構或類實現.struct listnode typedef li...

鍊錶的構建與排序

2.鍊錶的排序 給出若干個數,將數字儲存在鍊錶中,然後使用插入排序,按照公升序排列輸出數字。輸入乙個整數n表示有n個數,接著輸入這n個數。按照公升序輸出這n個數。5 3 2 4 5 4 2 3 4 4 5我沒有用插入排序 include include include typedef struct ...