鏈表:
一系列結(jié)構(gòu)連在一起,每一個結(jié)構(gòu)體變量里面都有一個指針pNext,pNext指向下一個結(jié)構(gòu)體變量,尾節(jié)點的pNext指向NULL。
小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 六二六,八七一,九一六? 】邀請碼凌云,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
靜態(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é)號和姓名: ");
scanf("%d%s", &pHead->number, pHead->name);
pHead->pNext = NULL;
printf("%d ", pHead->number);
增:
1、頭部增加:頭結(jié)點會變 需要返回一個pHead。
2、新節(jié)點的pNext指向pHead。
3、pHead指向pNew。
注意:2和3不能逆序。
//在頭部插入一個節(jié)點
structstudents *InsertAtHead(structstudents *pHead)
{
//新建一個節(jié)點
printf(" 在頭部插入一個節(jié)點 ");
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("請輸入新學(xué)生的信息! ");
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(" 在尾部插入一個節(jié)點 ");
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("請輸入新學(xué)生的信息! ");
scanf("%d%s", &pNew->number, pNew->name);
structstudents *pTemp;
pTemp = pHead;
//for (int i = 1; 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(" 在第%d個節(jié)點后插入一個節(jié)點 ",index);
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("請輸入新學(xué)生的信息! ");
scanf("%d%s", &pNew->number, pNew->name);
structstudents *pTemp;
structstudents *pPre;
pTemp = pHead;
pPre = pHead;
for (int i = 1; i
{
pPre = pTemp;
pTemp = pTemp->pNext;
}
pPre->pNext = pNew;
pNew->pNext = pTemp;
count++;
}