C 指標和引用(四)

2021-07-25 04:57:50 字數 4030 閱讀 6629

指標和引用

用指標處理鍊錶

一、鍊錶概述

鍊錶是由乙個個結點組成,每乙個結點是乙個結構體型別的變數,各個結點的型別相同,但其位址不一定連續。具體結點的個數根據需要動態開闢。

每個結點由兩部分組成,第一部分放若干資料,第二部分是指標變數,放下一結點的位址。煉表頭是一指標變數,放第乙個結點的位址,若結點的第二部分的值為null,表示此鍊錶結束。

二、如何處理鍊錶

1、建立鍊錶

struct  student

;

#define   stu  struct  student

stu

;

例:

struct student  *p;  //定義了結構體型別的指標

p=new student;  //用new開闢一結構體空間,將位址賦給p

p->num=10;   //為新開闢的結構體空間中的num成員賦值

1、首先定義兩個結構體型別的指標   stu   *p1, *p2;

2、用new在記憶體中開闢乙個結構體變數的空間,將位址賦給p1。

p1=new student; /*  stu  struct  student    */

3、將資料賦給剛開闢的變數空間。

cin>>p1->num>>p1->score;

4、若輸入的資料有效,將首位址作為煉表頭,head=p1; 令p2=p1,p1繼續用new開闢新的記憶體空間。

p1=new student; /*  stu  struct  student    */

5、將下乙個資料賦給新開闢的變數空間。

cin>>p1->num>>p1->score;

6、若輸入的資料有效,將p2與p1連線起來,p2->next=p1  再令p2=p1,p1繼續用new開闢新的記憶體空間。做5。若輸入的資料無效,p2就是鍊錶的尾,則p2->next=null。

2、輸出鍊錶

void print(stu  * head)

}

3、刪除鍊錶

1、首先定義兩個結構體型別的指標   stu   *p1, *p2;

2、將鍊錶的表頭賦給p1,  p1=head;

3、判斷p1所指向的結點是否是要刪除的結點   p1->num     a1。

4、若p1->num!=a1, p2=p1; p1指向下乙個結點p1=p1->next,繼續判斷下乙個結點是否是要刪除的結點。繼續做3。

5、若p1->num= =a1,則p1當前指向的結點就是要刪除的結點,將p2的指標成員指向p1所指的下乙個結點。

這樣就刪除了乙個結點。

特殊情況:

1、若煉表為空鍊錶,返回空指標。

2、刪除的結點為頭結點時,head指向下乙個結點

3、鍊錶內沒有要刪除的結點,返回提示資訊。

4、插入結點:要插入結點的鍊錶是排序的鍊錶。插入10。

1、定義三個結構體指標變數   stu  *p1,*p2,*p0;  p0指向要插入的結點。p1=head;

2、比較p1->num 與p0->num,若p1->numnum,p2=p1; p1=p1->next;    繼續比較。

3、若p1->num> =p0->num,p0應插在p1與p2之間,則p2->next=p0 ;          p0->next=p1;

特殊情況:

1、若煉表為空鍊錶,將插入結點作為唯一的結點,head=p0;返回。

2、若插入結點中的資料最小,則插入的結點作為頭結點。

p0->next=head;

head=p0;

3、插入到鏈尾,插入結點為最後乙個結點。

p2->next=p0;

p0->next=null;

用typedef定義型別

typedef定義新的型別來代替已有的型別。

typedef     已定義的型別     新的型別

typedef     float    real

real    x, y;    *****>      float    x, y;

1、typedef可以定義型別,但不能定義變數。

2、tyoedef只能對已經存在的型別名重新定義乙個型別名,而不能建立乙個新的型別名。

1、先按定義變數的方法寫出定義體

2、把變數名換成新型別名

3、在前面加typedef

4、再用新型別名定義變數

typedef:編譯時處理,定義乙個型別替代原有的型別。

C 指標和引用

在深入介紹之前我們首先來看一下指標和引用的定義 指標和引用的區別,然後分別針對指標和引用展開討論,深入細節為何有這些差異。指標和引用的定義,下面用通俗易懂的話來概述一下 而宣告指標是可以不指向任何物件,也正是因為這個原因,使用指標之前必須做判空操作,而引用就不必。其次,引用不可以改變指向,對乙個物件...

C 引用和指標

引用和指標看上去差不多,看上去差不多,其實男寶寶和女寶寶是不一樣的 用起來還是有一定差距。本人菜鳥僅將遇到的問題記錄備案,以便日後翻查 ptrfunc.h ifndef ptrfunc h define ptrfunc h typedef int func int,int struct aa end...

C 指標和引用

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能 到目前為止我們介紹過函式引數傳遞的兩種情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的 如果在執行函式期間形參的值發生變化,並不傳回給實參 因為在呼叫函式時,形參和實...