本文是想給對鍊錶基本不是太了解的人準備,這篇文章中的方法都只是最基本的方法,可以在《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...