概述
链表:
一系列结构连在一起,每一个结构体变量里面都有一个指针pNext,pNext指向下一个结构体变量,尾节点的pNext指向NULL。
静态链表:
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);
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('%dn', pHead->number);
增:
1、头部增加:头结点会变 需要返回一个pHead。
2、新节点的pNext指向pHead。
3、pHead指向pNew。
注意:2和3不能逆序。
//在头部插入一个节点
structstudents *InsertAtHead(structstudents *pHead)
{
//新建一个节点
printf('nn在头部插入一个节点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;
}
2、在尾部插入一个节点。
1、创建一个节点pNew
2、顶一个中间的指针pTemp 通过循环(条件为pTemp->pNext!=null).得到尾节点。
3、pTemp->pNext=pNew;
pNew->pNext=NULL;
在尾部插入一个节点
void InsertAtEnd(structstudents *pHead)
{
//新建一个节点
printf('nn在尾部插入一个节点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++; //节点数
}
在中间插入
//在中间(第几个节点之后)插入节点
void InsertAtMid(structstudents *pHead, intindex)
{
//新建一个节点
printf('nn在第%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语言基础——链表详解!的全部内容,希望文章能够帮你解决c语言 单链表基础知识,C语言基础——链表详解!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复