网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月03日漏签0天
c/c++吧 关注:2,413贴子:4,012
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 13回复贴,共1页
<<返回c/c++吧
>0< 加载中...

C语言编程基础学习——链表详解!

  • 只看楼主
  • 收藏

  • 回复
  • 凌云
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
链表:
一系列结构连在一起,每一个结构体变量里面都有一个指针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);

1、怎样来创建一个链表。
创建一块内存:
struct students *pHead = NULL; //头指针
struct students *pEnd = NULL; //尾指针
pHead = (struct students *)malloc(sizeof(struct students)); //开辟头结点
printf("请输入一个学生的学号和姓名: ");
scanf("%d%s", &pHead->number, pHead->name);
pHead->pNext = NULL;
printf("%d ", pHead->number);
增:
1、头部增加:头结点会变 需要返回一个pHead。
2、新节点的pNext指向pHead。
3、pHead指向pNew。
注意:2和3不能逆序。
//在头部插入一个节点
structstudents *InsertAtHead(structstudents *pHead)
{
//新建一个节点
printf(" 在头部插入一个节点 ");
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("请输入新学生的信息! ");
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(" 在尾部插入一个节点 ");
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("请输入新学生的信息! ");
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++; //节点数
}

在中间插入
//在中间(第几个节点之后)插入节点
void InsertAtMid(structstudents *pHead, intindex)
{
//新建一个节点
printf(" 在第%d个节点后插入一个节点 ",index);
structstudents *pNew;
pNew = (structstudents*)malloc(sizeof(structstudents));
printf("请输入新学生的信息! ");
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++;
}


  • 凌云
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


2025-08-03 13:30:29
广告
不感兴趣
开通SVIP免广告
  • wcjshlys
  • 铁杆吧友
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不错


  • wcjshlys
  • 铁杆吧友
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
连在一起更好


  • wcjshlys
  • 铁杆吧友
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
666


  • wcjshlys
  • 铁杆吧友
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不错


  • 凌云
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶下


  • 贴吧用户_5R8K6EM
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


2025-08-03 13:24:29
广告
不感兴趣
开通SVIP免广告
  • 追逐影子的小妮
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主用的是C语言版的数据结构吧,没记错的话还缺少单个节点删除、链表整表删除和双向链表什么的代码。
我之前学习过数据结构,我想喷这个用带指针节点组成动态链表。。我当时用像楼主一样,学完链表后,很兴奋,用纯写C了个统计文本中单词出现次数的程序,大致就是,以任何长度不是英文字母的字符作为单词分界,一个一个字符读取文本,然后得到一个个单词。初始链表是空,一个一个单词加上去,每次从文本文件读出一个单词,遍历一遍链表,查看是否存在,若存在,就把结构体中的unsigned int变量加一,若不存在,就按字典排序方式插入一个结点。写了不到二百行代码吧,调BUG用了不少时间,写完后,真的感觉自己很强。然后,后来学习C++,学到容器,看到list。。。还有map。。。还有标准库提供的那些泛型算法。。。然后用它现成的类和函数。。整个人都不好了。。。我只不过造了一个前人造过的轮子!!!造的还不好。。。用C++重写,代码那叫一个精简明了!!!
现在还在学C++,对比之前的c语言,我只能呵呵。。学习C,不妨去读本C++的书,看看它给你造好的轮子,直接用绝对比你自己写这个健壮,BUG也少。反正现在C++编译器基本上完全支持C。
至于,楼主写的这些。我现在感觉,就学习一下链表查找、构建、删除什么的原理,C语言链表这些原理上的东西,读完书上的代码,理解就好,如果想用它去编个小程序,不妨先去看看C++给你造好的轮子,舒服的多。


  • 追逐影子的小妮
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
码字码的我好累。欢迎大家来怒。毕竟还在学C++,理解可能不太够。说的话可能过激。。。。包涵一下下。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 13回复贴,共1页
<<返回c/c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示