链表

算法:

1.通俗定义:

解题的方法和步骤

2.狭义定义:

对存储数据的操作


3.广义定义:

广义的算法也叫泛型

无论数据是如何存储的,对数据的操作都是一样的

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

数组

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

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

3.查找数据快

链表

1.查找效率低

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

2.插入删除元素效率高

专业术语

头指针

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

头结点

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

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

头结点并不存放有效数据

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

首节点

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

尾节点

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

尾节点的指针域是空的(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语言学习笔记(13)——链表的更多相关文章

  1. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  2. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  3. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  4. 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理

    · 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...

  5. 《C# 语言学习笔记》——目录

    C# 简介 变量和表达式 流程控制 3.1 布尔逻辑 3.2 goto语句 3.3 分支 3.4 循环 变量的更多内容 4.1 类型转换 4.2 复杂的变量类型 4.3 字符串的处理 函数 5.1 定 ...

  6. Go语言学习笔记(1)——顺序编程

    Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

  7. Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

    Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...

  8. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  9. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  10. SQL反模式学习笔记13 使用索引

    目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引.  索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...

随机推荐

  1. Microsoft iSCSI Software Target 快照管理

    Microsoft iSCSI Software Target 支持快照管理,可以对设备进行手工创建快照.快照任务计划.快照回滚等操作. 首先配置iscsi 目标及设备映射关系,并在客户端通过发起程序 ...

  2. 4、qq物联SDK介绍及实例讲解

    1.到QQ物联官网http://iot.open.qq.com中下载软件SDK S3C2440_20161122_1.6.205_r4288.tar.gz注意:在后续大家实际开发过程中,可能你会下载到 ...

  3. eclipse config 2 tab -&gt; space

    编码规范要求不同意使用tab,可是又要有4个字符的缩进,连点4次space,这不是程序猿的风格 来看看 eclipse 设置一次tab像space的转换 例如以下操作 Window->Prefe ...

  4. KDE Plasma 5.8 的 LTS 周期正好与其所采用的 Qt 5.6 的 LTS 周期一致

    在 KDE Plasma 5.7 刚刚发布不久,KDE 开发团队就宣布了 KDE Plasma 5.8 的开发计划.这个版本将是一个 LTS 版本,据我所知,这应该是 KDE 历史上第一个 LTS 版 ...

  5. ZOJ-1649 Rescue BFS (HDU 1242)

    看题传送门: ZOJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649 HDU http://acm.hdu.edu. ...

  6. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

  7. JDK8 JVM性能优化-1

    原文地址:https://blog.csdn.net/xingkongtianma01/article/details/80689928 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的 ...

  8. python高级学习目录

    1. Linux介绍.命令1.1. 操作系统(科普章节) 1.2. 操作系统的发展史(科普章节) 1.3. 文件和目录 1.4. Ubuntu 图形界面入门 1.5. Linux 命令的基本使用 1. ...

  9. 简单的Java多线程的使用

    前几天做一个功能.就是在前台更改信息后会自己主动发邮件给其它的人,相关信息已更改,刚開始是直接在更改信息代码后面增加发送邮件的代码,但发现这样会使界面特别慢,而慢的主要原因是因为发送邮件有时会耗时非常 ...

  10. jquery-7 jquery中的文档处理方法有哪些(方法的参数表示功能增强)

    jquery-7 jquery中的文档处理方法有哪些(方法的参数表示功能增强) 一.总结 一句话总结:多看参考文档,多看主干目录.一般的功能分两个方法来实现,一个对应标签,一个对应标签和事情,比如克隆 ...