数据结构算法分析——C语言描述 第三章的单链表

很基础的东西。走一遍流程。有人说学编程最简单最笨的方法就是把书上的代码敲一遍。这个我是头文件是照抄的。.c源文件自己实现。

list.h

  1. typedef int ElementType;
  2. #ifndef _List_H
  3. #define _List_H
  4. struct Node;
  5. typedef struct Node *PtrToNode;
  6. typedef PtrToNode List;
  7. typedef PtrToNode Position;
  8. List CreatList();
  9. List MakeEmpty(List L);
  10. int IsEmpty(List L);
  11. int IsLast(Position P, List L);
  12. Position Find(ElementType X, List L);
  13. void Delete(ElementType X, List L);
  14. Position FindPrevious(ElementType X, List L);
  15. void Insert(ElementType X, Position P);
  16. void DeleteList(List L);
  17. Position Header(List L);
  18. Position First(List L);
  19. Position Advance(Position P);
  20. ElementType Retrieve(Position P);
  21. #endif

list.c

  1. #include"list.h"
  2. #include<stdlib.h>
  3. #include"fatal.h"
  4. struct  Node
  5. {
  6. ElementType Element;
  7. Position Next;
  8. };
  9. List CreatList() {
  10. List l = malloc(sizeof(struct Node));
  11. if (l == NULL)
  12. Error("out of memory");
  13. l->Next = NULL;
  14. return l;
  15. }
  16. List MakeEmpty(List L) {
  17. if (L != NULL)
  18. DeleteList(L);
  19. L = malloc(sizeof(struct Node));
  20. if (L == NULL)
  21. FatalError("Out of memory");
  22. L->Next = NULL;
  23. return L;
  24. }
  25. int IsEmpty(List L) {
  26. return L->Next == NULL;
  27. }
  28. int IsLast(Position P, List L) {
  29. return P->Next == NULL;
  30. }
  31. Position Find(ElementType X, List L) {
  32. Position P;
  33. P = L->Next;
  34. while (P != NULL&&P->Element != X)
  35. {
  36. P = P->Next;
  37. }
  38. return P;
  39. }
  40. void Delete(ElementType X, List L) {
  41. Position P;
  42. P = FindPrevious(X, L);
  43. if (!IsLast(P, L)) {
  44. Position TmpCell = P->Next;
  45. P->Next = TmpCell->Next;
  46. free(TmpCell);
  47. }
  48. }
  49. Position FindPrevious(ElementType X, List L) {
  50. Position P;
  51. P = L;
  52. while (P->Next != NULL&&P->Next->Element != X)
  53. P = P->Next;
  54. return P;
  55. }
  56. void Insert(ElementType X, Position P) {
  57. Position tmpCell;
  58. tmpCell = malloc(sizeof(struct Node));
  59. if (tmpCell == NULL)
  60. FatalError("Out of space!!");
  61. tmpCell->Element = X;
  62. tmpCell->Next = P->Next;
  63. P->Next = tmpCell;
  64. }
  65. void DeleteList(List L) {
  66. Position p;
  67. p = L->Next;
  68. L->Next = NULL;
  69. while (p != NULL){
  70. Position tmp;
  71. tmp = p->Next;
  72. free(p);
  73. p = tmp;
  74. }
  75. }
  76. Position Header(List L) {
  77. return L;
  78. }
  79. Position First(List L) {
  80. return L->Next;
  81. }
  82. Position Advance(Position P) {
  83. return P->Next;
  84. }
  85. ElementType Retrieve(Position P) {
  86. return P->Element;
  87. }

fatal.h

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #define Error(Str) FatalError(Str)
    4. #define FatalError(Str) fprintf(stderr,"%s\n",Str),exit(1)

数据结构与算法分析——C语言描述 第三章的单链表的更多相关文章

  1. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  2. 【数据结构与算法分析——C语言描述】第二章总结 算法分析

    算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...

  3. 【数据结构与算法分析——C语言描述】第一章总结 引论

    这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情 ...

  4. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  5. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  6. 《数据结构与算法分析-Java语言描述》 分享下载

    书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...

  7. 读书笔记:《数据结构与算法分析Java语言描述》

    目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...

  8. 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

    表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...

  9. 《数据结构与算法分析——C语言描述》ADT实现(NO.04) : AVL树(AVL-Tree)

    上次我们已经实现了普通的二叉查找树.利用二叉查找树,可以用O(logN)高度的树状结构存储和查找数据,提高了存储和查找的效率. 然而,考虑一种极端情形:依次插入1,2,3,4,5,6,7,8,9九个元 ...

随机推荐

  1. C# 使用 StructLayoutAttribute 时 C# /C++ 内存空间分配与成员对齐问题

    1. 使用场景 公共语言运行时控制数据字段的类或结构在托管内存中的物理布局.但是,如果想要将类型传递到非托管代码,需要使用 StructLayout 属性. 2. 内存分配问题. 如果不显示的设置内存 ...

  2. InnoDB全文索引:N-gram Parser【转】

    本文来自:http://mysqlserverteam.com/innodb%E5%85%A8%E6%96%87%E7%B4%A2%E5%BC%95%EF%BC%9An-gram-parser/ In ...

  3. Excel 点滴积累

    1.Excel中截取邮件@之后的字符 MID(text, start_num, num_chars) FIND(find_text,within_text,start_num) Right(strin ...

  4. ASP.NET MVC随想录——漫谈OWIN

    什么是OWIN OWIN是Open Web Server Interface for .NET的首字母缩写,他的定义如下: OWIN在.NET Web Servers与Web Application之 ...

  5. C#与Java多态方面的语法差异

    C++.C#.Java,无奈三种语言让我多次混淆,多次搞清楚,不写个Demo我想还是会忘记的. 就好像是一个满水的杯子,倒掉一点,才能装下更多. 有时候博客就是一个倒水的地方,可以让我们清空自己,然后 ...

  6. 使用微信web开发者工具调试微信企业号页面(前端页面,已发布在服务器上的)

    前几天写了一篇使用fiddler调试微信端页面的,然后博友评论说使用fiddler太麻烦了,推荐使用微信web开发者工具调试微信页面,这两天弄着玩了一下,很强大.这篇文章只是做一个记录,方便自己以后使 ...

  7. iOS10 SiriKit QQ适配详解

    原文连接 1. 概述 苹果在 iOS10 开放了 SiriKit 接口给第三方应用.目前,QQ已经率先适配了 Siri 的发消息和打电话功能.这意味着在 iOS10 中你可以直接告诉 Siri 让它帮 ...

  8. Power BI for Office 365(八)共享查询

    在Power Query中,你不但可以搜索线上的数据,也可以把自己的数据发布到线上供其它人检索.Power Query通过Power BI站点提供了这种内置的分享功能.在Excel中,Anna打开了她 ...

  9. Java 初学记录之可执行jar包

    环境 jdk7 jre7 当我用jdk7开发的时候,编写完成可执行的jar工具,并且成功使用. 当我在另一台机器安装了jre6,再次运行我的小工具jar 的时候,报错 解决: http://stack ...

  10. 弹性布局flex-兼容问题

    这里弹性布局的用法就不说了 用过的都知道很方便 虽然现在弹性布局已经实现标准了 但是还是存在一些兼容问题 旧版本 (一些低版本的浏览器) display:-webkit-box; 新版本(目前的标准版 ...