使用C语言描述静态链表和动态链表

静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。

静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。

动态链表是相对于静态链表而言的,一般地,在描述线性表的链式存储结构时如果没有特别说明即默认描述的是动态链表。

下面给出它们的简单实现,关于线性表更为详尽的C语言的实现,可以参考 http://www.cnblogs.com/choon/p/3876606.html

静态链表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include <stdio.h>

#include <stdlib.h>

/*所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。*/

struct Student

{

int num;

float score;

struct Student *next;

};

int main()

{

struct Student stu1, stu2, stu3, *head, *p;

stu1.num = 1001; stu1.score = 80; //对结点stu1的num和score成员赋值

stu2.num = 1002; stu2.score = 85; //对结点stu2的num和score成员赋值

stu3.num = 1003; stu3.score = 90; //对结点stu3的num和score成员赋值

head = &stu1;      //头指针指向第1个结点stu1

stu1.next = &stu2; //将结点stu2的地址赋值给stu1结点的next成员

stu2.next = &stu3; //将结点stu3的地址赋值给stu2结点的next成员

stu3.next = NULL;  //stu3是最后一个结点,其next成员不存放任何结点的地址,置为NULL

p = head;          //使p指针也指向第1个结点

//遍历静态链表

do{

printf("%d,%f\n", p->num, p->score); //输出p所指向结点的数据

p = p->next;                         //然后让p指向下一个结点

} while (p != NULL);                     //直到p的next成员为NULL,即完成遍历

system("pause");

}

动态链表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include <stdio.h>

#include <stdlib.h>

/*所谓动态链表,是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。*/

struct Student

{

int No;//学号

struct Student *next;

};

int main()

{

struct Student *p1, *p2, *head;

int n = 0; //结点个数

head = NULL;

p1 = (struct Student *)malloc(sizeof(struct Student));

printf("请输入1个学号\n");

scanf("%d", &p1->No);

p2 = p1; //开始时,p1和p2均指向第1个结点

while (p1->No != 0)

{

n++;

if (n == 1)

{

head = p1;

}

else

{

p2->next = p1;

}

p2 = p1;//p2是最后一个结点

printf("请输入学号,输入0终止:\n");

p1 = (struct Student *)malloc(sizeof(struct Student));

scanf("%d", &p1->No);

};

p2->next = NULL;//输入完毕后,p2->next为NULL

//遍历动态链表

struct Student *p;

p = head;

while (p != NULL)

{

printf("%d,", p->No);

p = p -> next;

}

printf("\n");

system("pause");

}

静态链表和动态链表 区别相关推荐

  1. 静态局部变量和动态局部变量区别

    静态局部变量和动态局部变量区别: 1.静态局部变量属于静态存储类别,在静态存储区分配存储单元,在整个运行期间都不释放. 而自动变量(动态局部变量)属于动态存储类别,占动态存储空间,函数调用后释放 2. ...

  2. c语言动态存储分配和链表,C语言静态链表和动态链表

    1. 静态链表 结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为"引用自身的结构体".如: struct link ...

  3. 静态语言和动态语言区别

    静态语言和动态语言的区别: 区别一: 静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型:比如C/C++ 是静态类型语言的典型代表,其他的静态类型语言还 ...

  4. 静态网页与动态网页区别

    动态网页的特点 1.采用动态网页技术的网站可以实现更多的功能,如用户注册.用户登录.在线调查.用户管理.订单管理等等; 2.动态网页以数据库技术为基础,可以大大降低网站维护的工作量; 3.动态网页中的 ...

  5. 静态IP与动态IP区别

    1.动态IP需要在连接网络时自动获取IP地址以供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上网,不需要获取IP地址. 网络世界中,数据的传输是以IP地址来作为源.目的地 ...

  6. 静态编译和动态编译区别

    静态函数库 一般扩展名为(.a),这类的函数库通常扩展名为libxxx.a . 这类函数库在编译的时候会直接整合到程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执 ...

  7. 静态网页与动态的区别

    1.网页制作使用的制作语言不同: 2.程序是否在服务器端运行,是重要标志.

  8. 静态URL和动态URL有什么区别呢?

    URL是用户以及搜索引擎进入网站的入口,URL长度以及复杂度都会影响到搜索引擎的抓取.收录和排名,所以对URL进行优化就非常重要了. 网站URL分为静态化.动态化以及伪静态化,由于搜索引擎对动态URL ...

  9. 静态IP与动态IP有什么区别,分别在什么时候用到

    一.静态IP与动态IP区别: 1.动态IP需要在连接网络时自动获取IP地址以供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上网,不需要获取IP地址. 网络世界中,数据的传 ...

最新文章

  1. 微型计算机一般按字长进行分类,关于计算机中:字,字节,字长,位的关系
  2. django之jquery完成ajax
  3. 单一职责原理讲解coding
  4. Eclipse 插件用法:Eclipse 利用 Amateras UML 生成 Java 类图、时序图和 UML 类图
  5. 圣诞节必备装饰场景PSD设计素材,不仅高清高质量
  6. cut out数据增强_ChIP-Seq数据分析(PE型)
  7. OOJ-面向对象编程的三大特点-封装,继承,多态分析与实例
  8. 深度学习:图像识别(匹配)方法|室内定位|论文与方法整理
  9. vivado之FFT ip核的入门学习
  10. qq空间java版_Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】...
  11. fastai v1环境搭建:Win10 MX250 CUDA10.1 cuDNN Pytorch1.0.0 Fastai v1安(bi)装(keng)指南
  12. speedoffice使用方法-word怎么添加边框
  13. Effective Scala
  14. 工业网关下工业自动化设备远程监控解决方案
  15. 通过cmd窗口导入导出mysql数据库
  16. 浏览安全怎么提升?教你设置安全浏览器信任站点
  17. TLE星历以及轨道计算方法
  18. shell脚本中的结构化命令(if-then-else、case、for、while、until) 脚本中的循环控制
  19. 【哈佛积极心理学笔记】第12讲 写日记
  20. 微信公众平台 发送消息-群发接口

热门文章

  1. python 面向对象 私有化浅析
  2. Linux就业技术指导(一):简历撰写及面试筹备要领
  3. Qt数据库编程_基本
  4. OFFICE OUTLOOK 2007 如何设置开机自动启动
  5. Fedora 18 下安装 mplayer
  6. 管理类软件设计“渔”之演化
  7. (十三)其他设计模式
  8. 使用 .toLocaleString() 轻松实现多国语言价格数字格式化
  9. 计算机应用在开始栏显示乱码,大神解决win10系统应用程序和开始菜单出现乱码的详细方案...
  10. android动画效果 translate,Android利用translate、scale、alpha、rotate实现动画效果