双向循环链表的插入和删除
2016-05-26 11:47
267 查看
#define OK 1 #define ERROR 0 typedef int Status; typedef struct DuLNode { ElelmentType data; struct DuLNode *prior; struct DuLNode *next; } * DuLinkedList; DuLinkedList getElemp(DuLinkedList &L,int i) { DuLinkedList p = L; for(int j = i; j >0; j--) { p = p->next; } return p; } /*在双链表第i个位置之前插入节点*/ Status insert_DuLinkedList(DuLinkedList &L,int i,ElelmentType e) { DuLinkedList p,s; if(!(p = getElemp(L,i)))//用于取得第i个位置的指针 return ERROR; if(!(s = (DuLinkedList)malloc(sizeof(struct DuLNode)))) return ERROR; s->data = e; s->prior = p->prior; s->prior->next = s; s->next = p; p->prior = s; return OK; } /*在双链表上删除元素*/ ElelmentType Delete_Dulist(DuLinkedList &L, int i, ElelmentType &e) { DuLinkedList p; if(!(p = getElemp(L,i))) return ERROR; e = p->data; p->prior->next = p-next; p->next->prior = p->prior; free(p); return e; }
View Code
需要注意的是,该双向循环链表默认有一个头节点,"第i个位置"是不包含头节点的,第一个位置,表示该链表第一个拥有实际意义的节点
相关文章推荐
- Android绘制炫酷引导界面
- ffmpeg解码烂视频
- 利用反射进行操作的一个工具类
- JAVA线程
- Redisclient 1.0 发布,Java 的 Redis 客户端 GUI 工具
- 动态规划(2)
- 解决集成融云IMKit 导致百度地图报错
- Ubuntu14.04 eclipse找不到自建××.h文件
- 计算机程序的构造和解释 练习 1.46
- Eclipse Build Path 的选项含义
- dorado与Struts、Hibernate、Spring的集成
- javascript 中的console.log有什么作用啊?
- 剑指offer P50 传递空指针
- 大数学家欧拉
- KinectFusion 中的 ICP 算法 GPU 代码解读
- java实现MD5加密
- iOS-本地通知
- 基于redis实现的锁
- Session管理(会话技术)
- 位操作基础篇之位操作全面总结