单链表的应用非常广,它可以实现栈,队列等;

Problem

我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的;

对链表这样简答的数据结构,有些书也是写得太过“完美”啦;

初学者很难抓住重点,反正我初学的时候就是看不懂;

因此我打算从简单入手去演示;

我们需要实现下面图这样的结构,叫做链表哈;

Solution

首先咱们要想到这几个ABC圆圈可以代表一个数据的节点,什么是节点呢?;

节点就好比是几个同学聚集到一个宿舍一样,他们各自有各自的身高体重;

因此,我们需要一个结构体,声明如下:

struct node {
int height;
int weight; };

这样一个结构体似乎还差些什么,我们观察上面的图发现,在每个圆圈的外边还有一个连接线;

我们需要这样一条线;

因此,我们的代码可能会是这样的:

struct node {
int height;
int weight;
void * a_line; };

但是呢!再想想,我们这条线指向的是和它本身一样的结构体;

我们如果声明为和它一样的指针不是更好吗?

struct node {
int height;
int weight;
struct node * a_line; };

我们把代码改回来,这样的声明到底合不合法呢?事实上,这里的递归声明一个指针是合法的;

好节点声明完啦,我们可以测试链表啦!这有点不可思议,那么简单吗?看看main函数;

#include <stdio.h>
#include <stdlib.h> struct node {
int hight;
int weight;
struct node * a_line; }; int main(void)
{
struct node * A = (struct node*)malloc(sizeof(struct node));
A->weight = ; //kg
A->hight = ; //cm
A->a_line = NULL;
return ;
}

好啦!链表完成啦!你或许以为我在开玩笑呢!好吧,其实的确是一个简单的链表啦;

只不过,它只有一个A点,你无法接受这种一个节点的链表,好吧,我们把ABC连接起来;

首先,我们需要三个点;

int main(void)
{
struct node * A = (struct node*)malloc(sizeof(struct node));
A->weight = ; //kg
A->hight = ; //cm
A->a_line = NULL; struct node * B = (struct node*)malloc(sizeof(struct node));
B->weight = ; //kg
B->hight = ; //cm
B->a_line = NULL; struct node * C = (struct node*)malloc(sizeof(struct node));
C->weight = ; //kg
C->hight = ; //cm
C->a_line = NULL; return ;
}

然后,是把他们连接起来;

    A->a_line = B;
B->a_line = C;

好啦!连起来啦,满意啦吧!,你肯定以为我又骗你;

毕竟,怎么也看不出来连接起来啦;

好,让我们从A到C路线走一程,看看能不能走通;

struct node * we;
we = A;
while (we != NULL){
printf("The hight is %d and the weight is %d \n",we->hight,we->weight);
we = we->a_line;
}

为了,”旅行“我们把名字报道到了旅行社;

并且,我们获取到了第一站地址就是A的地址啦!

出发;

while循环的意思很简单,判断我们是否到达终点;

没有到达就是打印,xxx,,你懂的;

然后we = we->a_line这句话是关键哦!

我不想解释,自己画图想想!!!

想好了看看我们的运行结果吧!

Discussion

我们的简单链表已经完成,它的缺点太多啦!

让我给你数数吧!例如:

1,要是数据很多怎么办,100000个节点,这个main函数得写多长啊。。。

2,这个连接的方式也太土啦吧!万一某个节点忘记连接下一个怎么办。。。

3,要是我想知道这个节点到底有多长,难道每次都要从头到尾数一遍嘛。。。

4,要是我想在尾部添加一个节点,是不是爬也要爬到尾部去啊。。。

等等。。。

我会尽快给大家写另一个版本哈!

See Also

http://www.cprogramming.com/tutorial/c/lesson15.html

C语言实现单链表-01版的更多相关文章

  1. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

  2. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  3. C语言实现单链表-04版

    前面的版本似乎没能让项目经理满意,他还希望这个链表有更多的功能: 我们接下来要解决几个比较简单的功能: Problem 1,更加友好的显示数据: 2,能够通过名字删除节点: Solution 首先我们 ...

  4. C语言实现单链表,并完成链表常用API函数

    C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...

  5. C语言实现单链表节点的删除(带头结点)

    我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...

  6. C/C++语言实现单链表(带头结点)

    彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...

  7. 「C语言」单链表/双向链表的建立/遍历/插入/删除

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  8. 一起talk C栗子吧(第十二回:C语言实例--单链表一)

    各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例.闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们,上一回中咱们没有说详细的样例,并且是说了样例中的文 ...

  9. C语言实现单链表(不带头结点)节点的插入

    对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://gith ...

随机推荐

  1. [html]选项卡效果

    晨间新闻 午间新闻 晚间新闻 视频新闻 <!doctype html> <html> <head> <meta charset="UTF-8&quo ...

  2. clang format 自定义样式常用参数说明

    常用的格式设置: #如果为真(true),分析格式化过的文件中最常见的&和*的对齐方式.然后指针对齐仅作为回退 DerivePointerAlignment: false #缩进宽度 Inde ...

  3. 关于Beam Search

    Wiki定义:In computer science, beam search is a heuristic search algorithm that explores a graph by exp ...

  4. 在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败。

    alter PROCEDURE PrTradingDelete ) AS BEGIN WHERE id in(@id) END GO 执行上面这个存储过程会异常.提示 :在将 varchar 值 '1 ...

  5. js完美转换阿拉伯数字为数字大写(原创)

    啥都不说,直接上代码: //阿拉伯数字转换为简写汉字 function Arabia_To_SimplifiedChinese(Num) { for (i = Num.length - 1; i &g ...

  6. Schema约束

    Schema约束(*xml中如何引入schema约束)(看懂Schema:能根据Schema写出XML文档来:)1.Schema约束文档本身就是一个XML文档.2.Schema对名称空间支持很好3.S ...

  7. PHP异步工作避免程序运行超时

    应用案例: 某SNS社区要求用户给自己好友(好友数量上百个)发送邮件,每封邮件内容不一,发送后提示发送完毕! 常用PHP写法 sendmail.php <?php $count=count($e ...

  8. web可用性测试

    1.软件质量模型 2.什么是可用性测试 a. 用户体验   Google搜索界面  ipod  iphone b.使用感受   清爽 ,美观,简洁 3. 一位局长使用B/S系统 今天我点名买了个B/S ...

  9. module中build.gradle文件参数含义

    主要是module的build.gradle,截图如下: 01行:apply plugin: 'com.android.application'    表示该module是这个应用程序的module ...

  10. Windows操作系统消费者价值亮点

    在讨论Windows操作系统之前,我们先看看消费者是什么. 消费者是产品和服务的最终使用者 ,其购买商品的目的主要是用于个人或家庭需要. 那么消费者的需求是什么,是使用,所以谁能给消费者更好的使用体验 ...