链表的游标实现
来源:互联网 发布:大型企业网络设计方案 编辑:程序博客网 时间:2024/05/21 06:59
数据结构与算法分析——c语言描述 第三章 链表的游标实现
和普通的链表没什么区别,就是用数组来实现内存空间,并且存在两个链表,一个是未使用元素组成的链表,首元素是下标为0。另一个个就是使用中的数表。使用之前要main函数手动初始化。
cursor.h
typedef int ElementType;#define SpaceSize 100#ifndef _Cursor_H#define _Cursor_Htypedef int PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;void InitializeCursorSpace(void);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, List L, Position P);void DeleteList(List L);Position Header(List L);Position First(List L);Position Advance(Position P);ElementType Retrieve(Position P);#endif
#include"cursor.h"#include<stdlib.h>#include"fatal.h"struct Node{ElementType Element;Position Next;};struct Node CursorSpace[SpaceSize];static List CursorAlloc() {Position p;p = CursorSpace[0].Next;CursorSpace[0].Next = CursorSpace[p].Next;return p;}static void Recover(Position p) {CursorSpace[p].Next = CursorSpace[0].Next;CursorSpace[0].Next = p;}void InitializeCursorSpace(void) {for (int i = 0; i < SpaceSize - 1; i++)CursorSpace[i].Next = i+1;CursorSpace[SpaceSize - 1].Next = 0;}List creatList() {List L;L = CursorAlloc();if (L == 0)FatalError("Out of memory");CursorSpace[L].Next = 0;return L;}List MakeEmpty(List L) {if (L != 0){DeleteList(L);CursorSpace[L].Next = 0;return L;}else {L = CursorAlloc();if (L == 0)FatalError("Out of memory");CursorSpace[L].Next = 0;return L;}}int IsEmpty(List L) {return CursorSpace[L].Next == 0;}int IsLast(Position P, List L) {return CursorSpace[P].Next == 0;}Position Find(ElementType X, List L) {Position P;P = CursorSpace[L].Next;while (P != 0 &&CursorSpace[P].Element != X){P = CursorSpace[P].Next;}return P;}void Delete(ElementType X, List L) {Position P;P = FindPrevious(X, L);if (!IsLast(P, L)) {Position TmpCell = CursorSpace[P].Next;CursorSpace[P].Next = CursorSpace[TmpCell].Next;Recover(TmpCell);}}Position FindPrevious(ElementType X, List L) {Position P;P = L;while (CursorSpace[P].Next != 0 && CursorSpace[CursorSpace[P].Next].Element != X)P = CursorSpace[P].Next;return P;}void Insert(ElementType X, List L, Position P) {Position tmpCell;tmpCell = CursorAlloc();if (tmpCell == 0)FatalError("Out of space!!");CursorSpace[tmpCell].Element = X;CursorSpace[tmpCell].Next = CursorSpace[P].Next;CursorSpace[P].Next = tmpCell;}void DeleteList(List L) {Position p;p = CursorSpace[L].Next;CursorSpace[L].Next = 0;while (p != 0) {Position tmp;tmp = CursorSpace[p].Next;Recover(p);p = tmp;}}Position Header(List L) {return L;}Position First(List L) {return CursorSpace[L].Next;}Position Advance(Position P) {return CursorSpace[P].Next;}ElementType Retrieve(Position P) {return CursorSpace[P].Element;}
main.c
#include<stdio.h>#include"cursor.h"int main() {InitializeCursorSpace();List l = creatList();Insert(23333, l, l);printf("%d", Retrieve(First(l)));}
0 0
- 链表的游标实现?
- 链表的游标实现
- 链表的游标实现
- 链表的游标实现
- 链表的游标实现
- 表的游标实现
- 链表游标实现
- 链表的游标(cursor)实现
- 【数据结构与算法】静态链表的游标实现
- 算法学习 - 链表的游标实现~ C++
- [数据结构与算法分析] 链表的游标实现
- c语言,顺序空间游标链表的实现
- 算法基础之链表的游标实现
- 第七篇:静态链表的游标实现
- sqlserver 游标的实现
- 数组的游标实现
- 游标的实现方法
- SQL游标的实现
- mybatis入门到精通01
- Android将Log写入文件
- "此证书的签发者无效",系统认证证书(AppleWWDRCA.cer)过期或删除
- Android判断asset中是否存在某个文件
- webapp开发技巧
- 链表的游标实现
- easyui textBox控件,监听事件不好使的解决办法
- Tomcat源码解析(四):tomcat核心组件初始化和启动
- MAT分析
- XMPP的简单了解及使用(2)
- 记录一下在Android使用Json解析字符串
- 由SpringMVC中的Controller注解@RequestMapping引发的思考
- 美女程序员如何面对男友出轨
- 【Android】android开发之splash闪屏页的四种实现方式,启动页的实现教程。