博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习算法 - 表指针实现~ C++
阅读量:7144 次
发布时间:2019-06-29

本文共 2872 字,大约阅读时间需要 9 分钟。

表指针实现。第二种方法是使用访问列表,模拟指针。

在我的理解中学习,它是创建一个节点数组,模拟存储装置,然后从中分配内存和释放内存。

但实际的内存没有被释放~

下面的代码直接附着:

////  main.cpp//  CursorList////  Created by Alps on 14-7-27.//  Copyright (c) 2014年 chen. All rights reserved.//#include 
#define CursorSpace 100#define ElementType intusing namespace std;typedef int PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;void InitializeCursorList(void);List MakeEmpty(List L);int isEmpty(List L);int isLast(List L, Position P);void Insert(List L, Position P, ElementType X);void Delete(List L, ElementType X);Position Find(List L, ElementType X);Position FindPrevious(List L, ElementType X);void DeleteList(List L);struct Node{ ElementType X; Position Next;};struct Node CursorList[CursorSpace];int isEmpty(List L){ return CursorList[L].Next == 0;}int isLast(List L, Position P){ return CursorList[P].Next == 0;}void InitializeCursorList(void){ int i = 0; for (i = 0; i < CursorSpace; i++) { CursorList[i].Next = i + 1; } CursorList[CursorSpace - 1].Next = 0;}Position CursorAlloc(){ Position P; P = CursorList[0].Next; CursorList[0].Next = CursorList[P].Next; CursorList[P].Next = 0; return P;}void CursorFree(Position P){ CursorList[P].Next = CursorList[0].Next; CursorList[0].Next = P;}Position Find(List L, ElementType X){ Position P = CursorList[L].Next; while (CursorList[P].X != X && P) { P = CursorList[P].Next; } if (P == 0) { return false; } return P;}Position FindPrevious(List L, ElementType X){ Position P = L; Position tmp = CursorList[P].Next; while (CursorList[tmp].X != X && tmp) { tmp = CursorList[tmp].Next; P = CursorList[P].Next; } return P;}void Delete(List L, ElementType X){ Position P = FindPrevious(L, X); Position tmp = CursorList[P].Next; CursorList[P].Next = CursorList[tmp].Next;}void Insert(List L, Position P, ElementType X){ Position tmp; tmp = CursorAlloc(); CursorList[tmp].X = X; CursorList[tmp].Next = CursorList[P].Next; CursorList[P].Next = tmp;}void DeleteList(List L){ Position P = CursorList[L].Next; Position tmp = P; while (tmp != 0) { P = CursorList[P].Next; CursorFree(tmp); if (P == 0) { break; } tmp = P; } CursorList[L].Next = 0;}void Print(List L){ Position P = CursorList[L].Next; while (P != 0) { printf("%d ",CursorList[P].X); P = CursorList[P].Next; } printf("\n");}int main(int argc, const char * argv[]){ printf("start ...\n"); InitializeCursorList(); List L = CursorAlloc(); Insert(L, L, 1); Insert(L, L, 3); Insert(L, L, 5); Insert(L, L, 4); Print(L); Position P = FindPrevious(L, 3); printf("%d\n",P); Delete(L, 3); Print(L); DeleteList(L); Print(L); return 0;}
算法是没有问题。之后,我每一个功能考完试~

有任何疑问,请留言~

转载地址:http://aywgl.baihongyu.com/

你可能感兴趣的文章
jQuery 各类判断函数汇总
查看>>
Android studio 分32位64位版本吗?
查看>>
UIcollectionView的使用(首页的搭建1)
查看>>
[原创]AM3352 + TPS65910 调试方法+调试记录
查看>>
.net基本数据类型操作
查看>>
docker 应用-2(Dockerfile 编写以及镜像保存提交)
查看>>
监控 Linux 性能的 18 个命令行工具
查看>>
3000本IT书籍下载地址
查看>>
VS2017 WinFrom打包设置与教程
查看>>
Cannot change version of project facet Dynamic Web Module to 3.0 requires Java 1.6 or newer 解决方案...
查看>>
数据库修改一个表中的字段值等于另一个表字段值
查看>>
mongodb pymongo.errors.CursorNotFound: Cursor not found, cursor id: 82792803897
查看>>
《Spring Security3》第四章第三部分翻译下(密码加salt)
查看>>
用户管理 之 用户(User)和用户组(Group)配置文件详解
查看>>
ubuntu 下安装查看pdf的工具
查看>>
UIApplication深入研究
查看>>
解决Ubuntu 12.04更新后 ”系统的网络服务与此版本的网络管理器不兼容“问题
查看>>
display inline inline-block block区别
查看>>
数据库触发器
查看>>
OpenWrt资料汇总
查看>>