鏈表:一系列結(jié)構(gòu)連在一起,每一個結(jié)構(gòu)體變量里面都有一個指針pNext,pNext指向下一個結(jié)構(gòu)體變量,尾節(jié)點的pNext指向NULL。 靜態(tài)鏈表:structstudents stu1 = { 1, 'a', NULL }; structstudents stu2 = { 2, 'b', NULL }; structstudents stu3 = { 3, 'c', NULL }; stu3.pNext = &stu2; stu2.pNext = &stu1; 動態(tài)內(nèi)存分配: Malloc(); void *malloc(unsigned int size) 這個函數(shù)在內(nèi)存中動態(tài)開辟一塊內(nèi)存,unsigned int size決定內(nèi)存的大小,void *空指針可以強制轉(zhuǎn)換為任何類型的指針。 這個函數(shù)返回一個指針,這個指針就是開辟的內(nèi)存地址。 pHead = (structstudents*)malloc(sizeof(structstudents)); free(); void free(void *ptr) free:釋放內(nèi)存。 free(pHead); 1、怎樣來創(chuàng)建一個鏈表。 創(chuàng)建一塊內(nèi)存: struct students *pHead = NULL; //頭指針 struct students *pEnd = NULL; //尾指針 pHead = (struct students *)malloc(sizeof(struct students)); //開辟頭結(jié)點 printf('請輸入一個學(xué)生的學(xué)號和姓名:\n'); scanf('%d%s', &pHead->number, pHead->name); pHead->pNext = NULL; printf('%d\n', pHead->number); 增: 1、頭部增加:頭結(jié)點會變 需要返回一個pHead。 2、新節(jié)點的pNext指向pHead。 3、pHead指向pNew。 注意:2和3不能逆序。 //在頭部插入一個節(jié)點 structstudents *InsertAtHead(structstudents *pHead) { //新建一個節(jié)點 printf('\n\n在頭部插入一個節(jié)點\n'); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('請輸入新學(xué)生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); pNew->pNext = pHead; //讓新節(jié)點的pNext-》原來的頭結(jié)點。 pHead = pNew; //把pHead指向新節(jié)點 count++; //節(jié)點數(shù)+1 returnpHead; } 2、在尾部插入一個節(jié)點。 1、創(chuàng)建一個節(jié)點pNew 2、頂一個中間的指針pTemp 通過循環(huán)(條件為pTemp->pNext!=null).得到尾節(jié)點。 3、pTemp->pNext=pNew; pNew->pNext=NULL; 在尾部插入一個節(jié)點 void InsertAtEnd(structstudents *pHead) { //新建一個節(jié)點 printf('\n\n在尾部插入一個節(jié)點\n'); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('請輸入新學(xué)生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); structstudents *pTemp; pTemp = pHead; //for (int i = 1; i < count;="" i++)=""> //{ // pTemp = pTemp->pNext; //} //for (; pTemp->pNext != NULL; pTemp = pTemp->pNext); while (pTemp->pNext != NULL) { pTemp = pTemp->pNext; } pNew->pNext = NULL; pTemp->pNext = pNew; count++; //節(jié)點數(shù) } 在中間插入 //在中間(第幾個節(jié)點之后)插入節(jié)點 void InsertAtMid(structstudents *pHead, intindex) { //新建一個節(jié)點 printf('\n\n在第%d個節(jié)點后插入一個節(jié)點\n',index); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('請輸入新學(xué)生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); structstudents *pTemp; structstudents *pPre; pTemp = pHead; pPre = pHead; for (int i = 1; i < index+1;="" i++)="" 假設(shè)index="2"> { pPre = pTemp; pTemp = pTemp->pNext; } pPre->pNext = pNew; pNew->pNext = pTemp; count++; } 今天小編就詳解到這了哦!感謝大家的分享,小編會持續(xù)更新完C語言基礎(chǔ)的所有章節(jié)!喜歡的讀者請關(guān)注并轉(zhuǎn)發(fā)!留言在評論區(qū),小編看到了會回復(fù)大家! |
|