链表的声明及操作
2015-06-25 16:28
211 查看
View Code
以上使用数组做的
以下使用链表
View Code
无论Find还是FindPrevious都是返回的指向结点的指针
以上使用数组做的
以下使用链表
#include<stdio.h> #include<stdlib.h> typedef struct Node *PtrToNode typedef PtrToNode List typedef PtrToNode Position struct Node{ ElementType Element; Position Next; }; /*测试链表是否为空*/ int IsEmpty(List L) { return L->Next == Null; } /*测试是否是链表结尾的函数*/ int IsLast(Position p,List L) { return p->Next == Null; } /*Find例程*/ /*find position of X,Null if not found*/ Position Find(ElementTYpe X,List L) { Position p; p=L->Next; while(p != NULL && p->Element != X) p=p->Next; return p; } /*FindPrevious assume header node*/ Position FindPrevious(List L,X) { Position p; p=L; while(p->Next != NULL && p->Next->Element != X)//总是先判断p指向的当前结点的Next为不为NULL,如果不为NUll p=p->Next; //当前次就去找他的下一个结点的Element值是否等于X return p;//返回的p如果指向最后一个标元,那就是没找到 } /*链表的删除例程*/ /*delete first occurence of X*/ /*assume header node use*/ void Delete(List L,ElementType Element) { Position p,TmpCell; p=FindPrevious(L,X); if(!IsLast(p,L)) { /*如果不用TmpCell需要删除的这个内存块,地址丢失 p->Next=p->Next->Next; free() */ TmpCell=p->Next; p->Next=TmpCell->Next; free(TmpCell); } } /*链表的插入例程*/ /*insert X after p*/ void Insert(List L,ElementType X,Position p) { Position TmpCell; TmpCell=(struct Node *)malloc(sizeof(struct Node)); TmpCell->Element=X; TmpCell->Next=p->Next;//先让TepCell指向后面,在让p->Next指向TmpCell,不然会丢失后面的地址 p->Next=TmpCell; }
View Code
无论Find还是FindPrevious都是返回的指向结点的指针
相关文章推荐
- .NET: C#: Datetime
- 动态图片
- MFC 重绘函数
- NGINX引入线程池 性能提升9倍
- Python 多线程 鸡肋也很好吃
- 关于webservice的问题
- 利用eclipse(MyEclipse)快速生成set、get方法的方法
- Java合并两个有序序列算法实现
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
- ffmpeg aac编码器比较
- gdb调试
- ubuntu12.04 解压jar包到指定目录
- 并行程序设计---cuda memory
- js返回上一页并刷新的多种实现方法
- INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES错误解决方法
- nginx php-fpm安装配置
- OpenGL 第一个三角形
- win7下PL/SQL Developer的安装
- 关于oracle数据库的一些基本操作
- Eclipse web工程 部署 三种方式 1