我们至少可以通过两种结构来存储数据

数组

1.需要一整块连续的存储空间,内存中可能没有

2.插入元素,删除元素效率极低。

3.查找数据快

链表

1.查找效率低

2.不需要一块连续的内存空间

3.插入删除元素效率高

计算机术语

头指针:存放头结点地址的指针变量

头结点:

数据类型和首节点的数据类型一模一样

头结点是首节点前面的那个节点

头结点并不存放有效数据

设置头结点的目的是为了方便对链表操作

首节点:存放第一个有效数据的节点

尾节点:

存放最后一个有效数据的节点

尾节点的指针域是空的(null)

头指针---->头结点---->(首节点----->链表------>尾节点)  ()内是有效数据

只需要知道头指针就能确定一个链表(尾节点指针域是null)

2012年2月6日7:30:48# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>struct Node{int data;struct Node * pNext;
};struct Node * create_list();
void traverseList(struct Node *);int main(void){struct Node * pHead = NULL;  //定义头指针pHead = create_list();  //构造链表,返回头结点地址traverseList(pHead);  //输出链表return 0;
}struct Node * create_list(void){int len;int i;int val;//创建一个头结点struct Node * pHead = (struct Node *)malloc(sizeof(struct Node)); if(NULL == pHead){printf("分配失败,程序终止!\n");exit(-1);}struct Node * pTail = pHead;  //将头结点的地址给指针变量pTail使pTail指向头结点pTail->pNext = NULL;  //头结点的结构体元素(下一个节点地址)赋值printf("请输入你要创建链表的节点个数:len = ");scanf("%d", &len);for(i=0; i<len; i++){printf("请输入第%d个节点的值:", i+1);scanf("%d", &val);//给第 i+1 个节点分配内存空间struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));if(NULL == pNew){printf("分配失败,程序终止!\n");exit(-1);}//内存分配成功后pNew->data = val;      //新节点赋值pTail->pNext = pNew;   //pNew指向的地址给头结点的变量pNew->pNext = NULL;    //新节点地址变量给空值pTail = pNew;         //重新使pTai 替换 pNew进行下一次分配创建}return pHead;
}void traverseList(struct Node * pHead){struct Node * p = pHead->pNext;while(NULL != p){printf("%d\n", p->data);p = p->pNext;}return;
}

忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(9)链表相关推荐

  1. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(5)有趣的指针

    一.指针是C语言的灵魂 # include <stdio.h>int main(){int *p; //p是变量名,int *表示p变量存放的是int类型变量的地址,p是一个指针变量int ...

  2. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(6)动态内存分配

    一.传统数组的缺点: 1.数组的长度必须事先定制,且只能是常整数,不能是变量 int len = 5; int a[len]; //error 2.传统形式定义的数组,该程序的内存程序员无法手动释放 ...

  3. 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(4)for == while ?

    一.for和while等价替换 int i = 1; for (i; i<=100; i++){sum = sum + 1; } int i = 1; while(i<=100){sum ...

  4. 自学c语言后的感受,C语言感触篇:十年之后重学C语言,岁月蹉跎,我听闻你始终一个人...

    C语言感触篇:十年之后重学C语言,岁月蹉跎,我听闻你始终一个人 我只是C粉 1.1 多次自学,不得其法 距离大学时学习C语言已有十个年头了.印象里最深的就是当时一位海归老师,在讲课时流露出对K& ...

  5. 从0开始学c语言-终篇41-练习、学习分享

    CSDN话题挑战赛第2期 参赛话题:学习笔记 终于,来到了终篇,我坚持做到了!每天一篇博客记录自己的学习(虽然中间有两天去干农活而断更了)!啊呜呜呜呜~激动! 但是,这不会是我的终点,这是新的起点.之 ...

  6. 后端开发需要学什么_都2020年了,还在纠结学什么语言?| 后端篇

    几个礼拜前,一个学弟问我: "Ray,我打算之后要找工作了,不过现在自己没有特别深入的语言,最近想找一门好好学一下,你觉得学什么语言好呀?" 我表示:"这个要看你求职方向 ...

  7. 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...

    是不是大学里的所有专业都会学一些计算机基础内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 是不是大学里的所有专业都会 ...

  8. 我从别人那里偷学的前端调试小技巧(浏览器篇)

    发现光,欣赏光,学习光 每个人身上都有着不同的闪光点,把焦点凝结在缺点上只会让互相难过.转移焦点,放在他的优点上,你会发现,唔还不错.而且,你还可以学习它,让你变得更棒.(我越来越擅长写鸡汤了???? ...

  9. 《快学 Go 语言》第 11 课 —— 千军万马跑协程

    协程和通道是 Go 语言作为并发编程语言最为重要的特色之一,初学者可以完全将协程理解为线程,但是用起来比线程更加简单,占用的资源也更少.通常在一个进程里启动上万个线程就已经不堪重负,但是 Go 语言允 ...

最新文章

  1. Shell基础学习笔记
  2. 聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
  3. Codeforces 1276D/1259G Tree Elimination (树形DP)
  4. Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child
  5. 华为手机媒体音量自动静音_华为手机的音量键原来这么牛逼,这五大玩法,97.777%的人不知道...
  6. go语言基础之导入包的常用方法
  7. L298N电机驱动模块《转》。
  8. Bean被IoC容器销毁后还能使用吗?
  9. android动画送礼物,Android开发仿映客送礼物效果
  10. mysql tablespace is missing for table_Mysql报错:Tablespace is missing for table ‘db_rsk/XXX”
  11. Spring boot带来的信息泄露
  12. ubuntu系统下建立wifi热点
  13. MCU采样NTC电阻ADC内阻
  14. 奇异值分解及几何意义
  15. 软考初级程序员上午单选题(13)
  16. 上海域格LTE模块CLM920_JC3贴片SIM卡双卡切换
  17. Latex之安装GBK字体
  18. exe4j详细使用教程(附下载安装链接)
  19. Maven - 6、生命周期和插件详解
  20. 第5关:C循环-寻找完数-------C语言程序设计技术(循环结构程序设计2)

热门文章

  1. canvas实现炫酷的一键抠图和背景替换
  2. UVA 11178-Morley's Theorem(计算几何_莫雷定理)
  3. 这4大决定性因素,让你明白孩子为什么只选择小天才电话手表
  4. php 1075 incorrect,windows无法启动wlan错误1075怎么办
  5. 郑义宣就任韩国现代汽车集团会长
  6. Java类和对象小结
  7. ROE指标的正确使用方法
  8. 解决windows下合上、掀开笔记本盖子后屏幕黑屏的问题
  9. 金融科技如何改变一家百年老银行?
  10. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器误差补偿方法.pdf