鍊錶基礎,建立,查詢,插入,整體刪除

2021-10-01 11:49:11 字數 1813 閱讀 9367

本文是想給對鍊錶基本不是太了解的人準備,這篇文章中的方法都只是最基本的方法,可以在《c語言程式設計》一書中找到,我只是補上了自己的理解幫助沒有看懂的小夥伴,鍊錶更難的方法我會在以後補上,一起加油!

鍊錶的建立

建立和輸出有若干個學生記錄的帶頭結點的單向鍊錶,用指標型別的函式creat()建立鍊錶,返回鍊錶的頭指標,函式中定義了三個指標變數,head為頭指標p1指向新節點,p2為尾指標指向尾節點。

演算法分析:

先產生頭結點,head,p2都指向他,輸入他的資料。

產生第乙個新節點,p1指向新節點,輸入他的資料。

當產生的新節點非0時進入迴圈,迴圈中,直接將新節點鏈結到表尾,再產生新結點,輸入資料,學號為0則迴圈結束。

釋放無效結點的儲存空間,尾結點指標域置空,反回頭指標。

#include

#include

//malloc函式在這個標頭檔案內

#define pt "學號:%ld 姓名:%-10s 成績:%6.1f\n",p->num,p->name,p->score

#define n sizeof(struct stud)

struct stud *

creat

(void);

void

print

(struct stud *p)

;struct stud

;struct stud *

creat

(void

)//這個函式最後返回的是頭指標,意思是返回乙個指向stud型別的指標

p2->next==

null

;free

(p1)

;return head;

}void

print

(struct stud *p)

}int

main()

心得:在理解這個**時總是因為p1,p2的理解偏差而感覺很繞。一定套注意在每乙個節點處都有兩個位址,乙個是自身位址,乙個是內部存的別人的位址,p1,p2的使命就是存這些節點本身的位址,p2->next的意思就是p2所指的結點記憶體的位址,讓他等於下乙個節點自身的位址來將他們連起來。

在理解上面的**後就可以看看以下**了,自己不要看打一遍!!!

鍊錶的查詢(緊接著上面)

struct stud *

find

(*p)

p=p->next;

}return

null

;}

鍊錶的插入

要求:增加乙個插入函式insert().假設所有結點都是按學號的大小公升序連線的,插入新節點後仍保持公升序,若

新節點的學號與原有某節點的學號相同則不插入。

int

insert

(struct stud *p0)

if(p0->next!=

null

&&p0->next->num==num)

p->next=p0->next;

//將p0所指後面的節點的位址存到p指的節點中

p0->next=p;

return1;

}

鍊錶的整體刪除

void

shanchu

(struct styd *p)

}//p=null時退出

鍊錶 建立 插入 刪除 查詢

include include typedef struct node int data struct node next node node createlist 建立乙個單鏈表 printf 建立乙個長度為 n的鍊錶,請輸入 n int n scanf d n node l l node mal...

鍊錶建立 插入 刪除

這兩天,拼命理解鍊錶,儘管現在理解還是不夠,但終於把長久以來一直折磨我的鍊錶用c 打出來了。還是有點小小的成就感。以下是 包括鍊錶建立 頭插法和尾插法 插入乙個位置的鍊錶 刪除乙個位置的鍊錶以及整個鍊錶的刪除。define null 0 include using namespace std int...

鍊錶的建立 刪除 插入

1.鍊錶的建立 需要乙個頭指標 結點指標 尾指標即可。這裡值得注意的是,建立的過程頭指標是不能變的,而每次插入乙個節點,尾指標都要後移乙個節點 一開始把尾指標指向頭指標 如建立含有n個結點的鍊錶如下 node create else pend next null ps new node delete...