日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言链表编程作业,C语言编程入门——链表

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言链表编程作业,C语言编程入门——链表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈表是為克服數(shù)組的缺點,在內(nèi)存空間中離散存儲,但需要一個指針記住下一個結(jié)點的地址,以便可以將鏈表結(jié)點連接起來。

鏈表與數(shù)組的比較:

數(shù)組

優(yōu)點:存取速度快。

缺點:插入和刪除元素的效率很低;

需要一塊連續(xù)的內(nèi)存空間。

鏈表

專業(yè)術(shù)語

首節(jié)點

存放第一個有效數(shù)據(jù)的節(jié)點

尾節(jié)點

存放最后一個有效數(shù)據(jù)的節(jié)點

頭結(jié)點

頭結(jié)點的數(shù)據(jù)類型和首節(jié)點的類型是一樣的(結(jié)構(gòu)體變量類型)

頭結(jié)點是首節(jié)點前面的那個節(jié)點,頭結(jié)點并不存放有效數(shù)據(jù),

設(shè)置頭結(jié)點的目的是為了方便對鏈表的操作。

頭指針

存放頭結(jié)點地址的指針變量

優(yōu)點:插入刪除元素效率高;

不需要一塊連續(xù)的很大的內(nèi)存空間。

缺點:查找某個位置的元素效率低。

定義

鏈表的基本單元是節(jié)點,節(jié)點分為兩部分:數(shù)據(jù)域和指針域,數(shù)據(jù)域用來存放有效數(shù)據(jù),指針域存

放下一個節(jié)點的地址。所以鏈表的節(jié)點都是結(jié)構(gòu)體變類型。

用創(chuàng)建鏈表時,鏈表必須為動態(tài)創(chuàng)建,以便其它函數(shù)對其進行操作。

要確定一個鏈表,只需鏈表的頭指針即可,即函數(shù)參數(shù)只需一個。

鏈表的實現(xiàn):

# include

# include

# include

struct Node //通過結(jié)構(gòu)體定義節(jié)點

{

int data; //創(chuàng)建數(shù)據(jù)域

struct Node * pNext; //創(chuàng)建指針域

};

//函數(shù)聲明

struct Node * CreateList(void);

void TraverseList(struct Node *);

bool isEmpty(struct Node *);

int main(void)

{

struct Node * pHead; //創(chuàng)建頭指針,用來存放頭結(jié)點的地址。

pHead = CreateList(); //CreateList()函數(shù)動態(tài)創(chuàng)建鏈表并返回頭結(jié)點的地址。

printf("\n");

TraverseList(pHead); //函數(shù)參數(shù)只需頭指針即可確定一個鏈表。

return 0;

}

struct Node * CreateList(void) //函數(shù)返回值為struct Node * 類型。

{

int len;

int i;

int val;

struct Node * pHead = (struct Node *)malloc(sizeof(struct Node));

if (NULL == pHead)

{

printf("分配頭結(jié)點空間失敗,程序終止!\n");

exit(-1); //exit函數(shù),退出程序。

}

struct Node * pTail = pHead; //創(chuàng)建尾指針指向尾節(jié)點

pTail->pNext = NULL;

printf("請輸入鏈表的節(jié)點個數(shù):len = ");

scanf("%d", &len);

for (i=0; i

{

printf("請輸入第%d個節(jié)點的值:", i+1);

scanf("%d", &val);

struct Node * pNew = (struct Node *)malloc(sizeof(struct Node)); //鏈表的不連續(xù)性在于它的內(nèi)存空間在不斷地一個個分配,而數(shù)組則是一次性分配完成。

if (NULL == pNew)

{

printf("分配空間失敗,程序終止!\n");

exit(-1);

}

pNew->data = val;

pTail->pNext = pNew;

pNew->pNext = NULL;

pTail = pNew; //遞歸

}

return pHead;

}

void TraverseList(struct Node * pHead) //遍歷輸出

{

struct Node * p;

if (isEmpty(pHead))

{

printf("鏈表為空!\n");

}

else

{

p = pHead->pNext; //使指針指向下一個節(jié)點

printf("鏈表中的數(shù)據(jù)為:\n");

while (NULL != p)

{

printf("%d ", p->data);

p = p->pNext;

}

printf("\n");

}

return;

}

bool isEmpty(struct Node * pHead)

{

if (NULL == pHead)

return true;

else

return false;

}

應(yīng)用實例:學(xué)生信息管理系統(tǒng)

# include

# include

struct Student

{

char name[20];

int age;

float score;

};

void Input(struct Student *, int);

void sort(struct Student *, int);

void Output(struct Student *, int);

int main(void)

{

int len;

struct Student * pArr;

printf("請輸入學(xué)生的個數(shù):\n");

printf("len = ");

scanf("%d", &len);

pArr = (struct Student *)malloc(len*sizeof(struct Student));

Input(pArr, len);

sort(pArr, len);

printf("\n\n");

printf("排序結(jié)果是:\n");

Output(pArr, len);

return 0;

}

void Input(struct Student * pArr, int len)

{

int i;

for (i=0; i

{

printf("請輸入第%d個學(xué)生的信息:\n", i+1);

printf("name = ");

scanf("%s", pArr[i].name); //結(jié)構(gòu)體中name成員本身為數(shù)組,數(shù)組名name即為第一個元素的地址,不需要加&

printf("age = ");

scanf("%d", &pArr[i].age);

printf("score = ");

scanf("%f", &pArr[i].score);

}

}

void sort(struct Student * pArr, int len)

{

int i, j;

struct Student t;

for (i=0; i

{

for (j=0; j

{

if (pArr[j].score < pArr[j+1].score)

{

t = pArr[j];

pArr[j] = pArr[j+1];

pArr[j+1] = t;

}

}

}

}

void Output(struct Student * pArr, int len)

{

int i;

for (i=0; i

{

printf("第%d名學(xué)生的信息是:\n", i+1);

printf("name = ");

printf("%s",pArr[i].name);

printf("\n");

printf("age =");

printf("%d", pArr[i].age);

printf("\n");

printf("score = ");

printf("%f", pArr[i].score);

printf("\n");

}

}



總結(jié)

以上是生活随笔為你收集整理的c语言链表编程作业,C语言编程入门——链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。