分享

C语言基础——链表详解!

 豫龙晏子 2017-02-09

链表:

一系列结构连在一起,每一个结构体变量里面都有一个指针pNext,pNext指向下一个结构体变量,尾节点的pNext指向NULL。

C语言基础——链表详解!


C语言基础——链表详解!

静态链表:

structstudents stu1 = { 1, 'a', NULL };

structstudents stu2 = { 2, 'b', NULL };

structstudents stu3 = { 3, 'c', NULL };

stu3.pNext = &stu2;

stu2.pNext = &stu1;

动态内存分配:

Malloc();

void *malloc(unsigned int size)

这个函数在内存中动态开辟一块内存,unsigned int size决定内存的大小,void *空指针可以强制转换为任何类型的指针。

这个函数返回一个指针,这个指针就是开辟的内存地址。

pHead = (structstudents*)malloc(sizeof(structstudents));

free();

void free(void *ptr)

free:释放内存。

free(pHead);

C语言基础——链表详解!

1、怎样来创建一个链表。

创建一块内存:

struct students *pHead = NULL; //头指针

struct students *pEnd = NULL; //尾指针

pHead = (struct students *)malloc(sizeof(struct students)); //开辟头结点

printf('请输入一个学生的学号和姓名:\n');

scanf('%d%s', &pHead->number, pHead->name);

pHead->pNext = NULL;

printf('%d\n', pHead->number);

增:

1、头部增加:头结点会变 需要返回一个pHead。

2、新节点的pNext指向pHead。

3、pHead指向pNew。

注意:2和3不能逆序。

//在头部插入一个节点

structstudents *InsertAtHead(structstudents *pHead)

{

//新建一个节点

printf('\n\n在头部插入一个节点\n');

structstudents *pNew;

pNew = (structstudents*)malloc(sizeof(structstudents));

printf('请输入新学生的信息!\n');

scanf('%d%s', &pNew->number, pNew->name);

pNew->pNext = pHead; //让新节点的pNext-》原来的头结点。

pHead = pNew; //把pHead指向新节点

count++; //节点数+1

returnpHead;

}

C语言基础——链表详解!

2、在尾部插入一个节点。

1、创建一个节点pNew

2、顶一个中间的指针pTemp 通过循环(条件为pTemp->pNext!=null).得到尾节点。

3、pTemp->pNext=pNew;

pNew->pNext=NULL;

在尾部插入一个节点

void InsertAtEnd(structstudents *pHead)

{

//新建一个节点

printf('\n\n在尾部插入一个节点\n');

structstudents *pNew;

pNew = (structstudents*)malloc(sizeof(structstudents));

printf('请输入新学生的信息!\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++; //节点数

}

C语言基础——链表详解!

在中间插入

//在中间(第几个节点之后)插入节点

void InsertAtMid(structstudents *pHead, intindex)

{

//新建一个节点

printf('\n\n在第%d个节点后插入一个节点\n',index);

structstudents *pNew;

pNew = (structstudents*)malloc(sizeof(structstudents));

printf('请输入新学生的信息!\n');

scanf('%d%s', &pNew->number, pNew->name);

structstudents *pTemp;

structstudents *pPre;

pTemp = pHead;

pPre = pHead;

for (int i = 1; i < index+1;="" i++)="" 假设index="2">

{

pPre = pTemp;

pTemp = pTemp->pNext;

}

pPre->pNext = pNew;

pNew->pNext = pTemp;

count++;

}

C语言基础——链表详解!

C语言基础——链表详解!

今天小编就详解到这了哦!感谢大家的分享,小编会持续更新完C语言基础的所有章节!喜欢的读者请关注并转发!留言在评论区,小编看到了会回复大家!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多