C語言是面向過程的明垢,而C++是面向?qū)ο蟮?/b>
C和C++的區(qū)別:
C是一個(gè)結(jié)構(gòu)化語言痊银,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)溯革。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程致稀,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)抖单。
C++矛绘,首要考慮的是如何構(gòu)造一個(gè)對象模型货矮,讓這個(gè)模型能夠契合與之對應(yīng)的問題域囚玫,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制裸违。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn)枪汪,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”宿稀。
C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣祝沸。之所以說C++比C更先進(jìn)罩锐,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語言本身而言竭恬,在C中更多的是算法的概念。那么是不是C就不重要了岔绸,錯(cuò)亭螟!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法扁掸,一樣不行锈麸。而且忘伞,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。
鏈表:
一系列結(jié)構(gòu)連在一起,每一個(gè)結(jié)構(gòu)體變量里面都有一個(gè)指針pNext,pNext指向下一個(gè)結(jié)構(gòu)體變量育勺,尾節(jié)點(diǎn)的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)
這個(gè)函數(shù)在內(nèi)存中動態(tài)開辟一塊內(nèi)存,unsigned int size決定內(nèi)存的大小,void *空指針可以強(qiáng)制轉(zhuǎn)換為任何類型的指針蒜焊。
這個(gè)函數(shù)返回一個(gè)指針,這個(gè)指針就是開辟的內(nèi)存地址优妙。
pHead = (structstudents*)malloc(sizeof(structstudents));
free();
void free(void *ptr)
free:釋放內(nèi)存。
free(pHead);
1九妈、怎樣來創(chuàng)建一個(gè)鏈表。
創(chuàng)建一塊內(nèi)存:
struct students *pHead = NULL; //頭指針
struct students *pEnd = NULL; //尾指針
pHead = (struct students *)malloc(sizeof(struct students)); //開辟頭結(jié)點(diǎn)
printf("請輸入一個(gè)學(xué)生的學(xué)號和姓名: ");
scanf("%d%s", &pHead->number, pHead->name);
pHead->pNext = NULL;
printf("%d ", pHead->number);
增:
1、頭部增加:頭結(jié)點(diǎn)會變 需要返回一個(gè)pHead。
2、新節(jié)點(diǎn)的pNext指向pHead。
3耸携、pHead指向pNew。
注意:2和3不能逆序。
//在頭部插入一個(gè)節(jié)點(diǎn)
structstudents *InsertAtHead(structstudents *pHead)
{
//新建一個(gè)節(jié)點(diǎn)
printf(" 在頭部插入一個(gè)節(jié)點(diǎn) ");
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("請輸入新學(xué)生的信息! ");
scanf("%d%s", &pNew->number, pNew->name);
pNew->pNext = pHead; //讓新節(jié)點(diǎn)的pNext-》原來的頭結(jié)點(diǎn)颊咬。
pHead = pNew; //把pHead指向新節(jié)點(diǎn)
count++; //節(jié)點(diǎn)數(shù)+1
returnpHead;
}
2麸澜、在尾部插入一個(gè)節(jié)點(diǎn)票髓。
1、創(chuàng)建一個(gè)節(jié)點(diǎn)pNew
2、頂一個(gè)中間的指針pTemp 通過循環(huán)(條件為pTemp->pNext踪区!=null).得到尾節(jié)點(diǎn)白粉。
3眷细、pTemp->pNext=pNew;
pNew->pNext=NULL;
在尾部插入一個(gè)節(jié)點(diǎn)
void InsertAtEnd(structstudents *pHead)
{
//新建一個(gè)節(jié)點(diǎn)
printf(" 在尾部插入一個(gè)節(jié)點(diǎn) ");
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 < count; i++) //節(jié)點(diǎn)數(shù)的值
//{
// 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é)點(diǎn)數(shù)
}
在中間插入
//在中間(第幾個(gè)節(jié)點(diǎn)之后)插入節(jié)點(diǎn)
void InsertAtMid(structstudents *pHead, intindex)
{
//新建一個(gè)節(jié)點(diǎn)
printf(" 在第%d個(gè)節(jié)點(diǎn)后插入一個(gè)節(jié)點(diǎn) ",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 < index+1; i++) //假設(shè)index=2 需要循環(huán)2次
{
pPre = pTemp;
pTemp = pTemp->pNext;
}
pPre->pNext = pNew;
pNew->pNext = pTemp;
count++;
}
今天小編就詳解到這了哦!感謝大家的分享,小編會持續(xù)更新完C語言基礎(chǔ)的所有章節(jié)扳碍!喜歡的讀者請關(guān)注并轉(zhuǎn)發(fā)荠瘪!留言在評論區(qū)夯巷,小編看到了會回復(fù)大家!