数据结构算法分析——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. android BitMap回收

    第一种方法--及时回收bitmap内存: 一般而言,回收bitmap内存可以用到以下代码 if(bitmap != null && !bitmap.isRecycled()){ bit ...

  2. poj1988_Cube Stacking

    Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 24130   Accepted: 8468 Ca ...

  3. CentOS7 词典

    goldendict sudo yum install goldendict打开goldendict,阅读welcome,添加本地词典,在http://abloz.com/huzheng/stardi ...

  4. asp.net mvc 多级文件夹

    ASP.NET MVC - 定制属于你自己的ViewEngine 标签: asp.netmvcstring引擎razorapplication 2012-07-26 14:17 5365人阅读 评论( ...

  5. myEclipse svn插件安装

    方法一(liuyou在安装时报空指针异常) 1.打开HELP->MyEclipse Configuration Center,切换到SoftWare标签页. 2.点击Add Site 打开对话框 ...

  6. 【XLL 框架库函数】 TempBool/TempBool12

    创建一个包含了 Boolean 类型的 TRUE 或 FALSE 的 XLOPER/XLOPER12 LPXLOPER TempBool(int b); LPXLOPER12 TempBool12(i ...

  7. hive创建索引

    索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 hive> create index [index_studentid ...

  8. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  9. 将Linux下的Android签名对pk8和pem转换为Eclipse下的签名(keystore)

    一 在github上下载工具 https://github.com/getfatday/keytool-importkeypair 二 将工具在Linux环境下解压或者解压后Copy到Linux下,运 ...

  10. Pfile VS Spfile (MOS Note 249664.1)

    ============================================================================== Until Oracle 8i DBAs ...