数据结构与算法分析——C语言描述 第三章的单链表
很基础的东西。走一遍流程。有人说学编程最简单最笨的方法就是把书上的代码敲一遍。这个我是头文件是照抄的。.c源文件自己实现。
list.h
- typedef int ElementType;
- #ifndef _List_H
- #define _List_H
- struct Node;
- typedef struct Node *PtrToNode;
- typedef PtrToNode List;
- typedef PtrToNode Position;
- List CreatList();
- List MakeEmpty(List L);
- int IsEmpty(List L);
- int IsLast(Position P, List L);
- Position Find(ElementType X, List L);
- void Delete(ElementType X, List L);
- Position FindPrevious(ElementType X, List L);
- void Insert(ElementType X, Position P);
- void DeleteList(List L);
- Position Header(List L);
- Position First(List L);
- Position Advance(Position P);
- ElementType Retrieve(Position P);
- #endif
list.c
- #include"list.h"
- #include<stdlib.h>
- #include"fatal.h"
- struct Node
- {
- ElementType Element;
- Position Next;
- };
- List CreatList() {
- List l = malloc(sizeof(struct Node));
- if (l == NULL)
- Error("out of memory");
- l->Next = NULL;
- return l;
- }
- List MakeEmpty(List L) {
- if (L != NULL)
- DeleteList(L);
- L = malloc(sizeof(struct Node));
- if (L == NULL)
- FatalError("Out of memory");
- L->Next = NULL;
- return L;
- }
- int IsEmpty(List L) {
- return L->Next == NULL;
- }
- int IsLast(Position P, List L) {
- return P->Next == NULL;
- }
- Position Find(ElementType X, List L) {
- Position P;
- P = L->Next;
- while (P != NULL&&P->Element != X)
- {
- P = P->Next;
- }
- return P;
- }
- void Delete(ElementType X, List L) {
- Position P;
- P = FindPrevious(X, L);
- if (!IsLast(P, L)) {
- Position TmpCell = P->Next;
- P->Next = TmpCell->Next;
- free(TmpCell);
- }
- }
- Position FindPrevious(ElementType X, List L) {
- Position P;
- P = L;
- while (P->Next != NULL&&P->Next->Element != X)
- P = P->Next;
- return P;
- }
- void Insert(ElementType X, Position P) {
- Position tmpCell;
- tmpCell = malloc(sizeof(struct Node));
- if (tmpCell == NULL)
- FatalError("Out of space!!");
- tmpCell->Element = X;
- tmpCell->Next = P->Next;
- P->Next = tmpCell;
- }
- void DeleteList(List L) {
- Position p;
- p = L->Next;
- L->Next = NULL;
- while (p != NULL){
- Position tmp;
- tmp = p->Next;
- free(p);
- p = tmp;
- }
- }
- Position Header(List L) {
- return L;
- }
- Position First(List L) {
- return L->Next;
- }
- Position Advance(Position P) {
- return P->Next;
- }
- ElementType Retrieve(Position P) {
- return P->Element;
- }
fatal.h
- #include<stdio.h>
- #include<stdlib.h>
- #define Error(Str) FatalError(Str)
- #define FatalError(Str) fprintf(stderr,"%s\n",Str),exit(1)
数据结构与算法分析——C语言描述 第三章的单链表的更多相关文章
- 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...
- 【数据结构与算法分析——C语言描述】第一章总结 引论
这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情 ...
- 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)
#include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...
- C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...
- 《数据结构与算法分析-Java语言描述》 分享下载
书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...
- 读书笔记:《数据结构与算法分析Java语言描述》
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...
- 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes
表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.04) : AVL树(AVL-Tree)
上次我们已经实现了普通的二叉查找树.利用二叉查找树,可以用O(logN)高度的树状结构存储和查找数据,提高了存储和查找的效率. 然而,考虑一种极端情形:依次插入1,2,3,4,5,6,7,8,9九个元 ...
随机推荐
- 构建高可用ZooKeeper集群(转载)
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
- java21
1:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. (2)转换流其实是一个字符流 字符流 = 字节流 + 编码表 (3)编码表 ...
- Outlook~设置
outlook2013 中帐户设置无法直接更改邮件投递位置到本地的.pst文件,“更改文件夹”选项已经删除. Exchange 传递到 Outlook 数据文件 (.pst) 升级到 Outlook ...
- 7.openstack之mitaka搭建dashboard
部署控制面板dashboard 控制节点 1.安装软件包 yum install openstack-dashboard -y 2.配置 vim /etc/openstack-dashboard/lo ...
- Fitbit Flex
Fitbit Flex 使用 7月4日,收到了在美国亚马逊上海淘的Fitbit Flex.首先谈谈这价格,在美国亚马逊上购买时的价格是98美元,下订单过后没几天,京东开始首发出售,价格定在898元.相 ...
- Android笔记:通知
可以在活动里创建,也可以在广播接收器里创建,还可以在服务里创建. NotificationManager manager = (NotificationManager)getSystemService ...
- jquery this 和 event.target 区别
1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素: 2.this和event.t ...
- kettle系列-3.kettle读取数据库资源库很慢的优化
环境:windows7,jvm内存设置14G,kettle5.1后来升级到5.4,oracle作为资源库. 问题背景:我们通过web页面管理kettle的job运行,这只是一个管理界面,即使web项目 ...
- 2016"百度之星" - 资格赛(Astar Round1)
逆元 1001 Problem A 求前缀哈希和逆元 #include <bits/stdc++.h> typedef long long ll; const int MOD = 9973 ...
- 【转】Java内存管理:深入Java内存区域
转自:http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一 ...