数据结构-双向循环链表
来源:互联网 发布:淘宝付费推广技巧 编辑:程序博客网 时间:2024/05/18 02:16
数据结构-双向循环链表:
长相:
#include <iostream>using namespace std;template <typename T>struct DoubleList{T data;struct DoubleList<T>* front;struct DoubleList<T>* tail;struct DoubleList<T>* CreateList(){//要内存 struct DoubleList<T>* List = new DoubleList<T>; //很容易犯错//描述最初状态List->front = List->tail = List;return List;}struct DoubleList<T>* CreateNode(T data){//要内存 struct DoubleList<T>* Node = new DoubleList<T>; //很容易犯错//描述最初状态//方便连接Node->front = Node->tail = NULL;Node->data = data;return Node;}void InsertHeadOrTail(struct DoubleList<T>* List, T data){//首先创建插入的结点struct DoubleList<T>* Node = CreateNode(data);struct DoubleList<T>* p = List;while (p->tail != List){p = p->tail;}//看图写作文List->front = Node;Node->tail = List;Node->front = p;p->tail = Node;}bool IsEmptyList(struct DoubleList<T>* List){return List->tail == List; //1表示空}void PrintList(struct DoubleList<T>* List){if (IsEmptyList(List)){cout << "表为空,无法打印" << endl;return;}struct DoubleList<T>* p = List->tail;while (p->front != List->front)//面试题: 如何判链表是否循环{cout << p->data << "\t";p = p->tail;}cout << endl;}void InsertNodeAppoin(struct DoubleList<T>* List, T data, T item){struct DoubleList<T>* Node = CreateNode(data);struct DoubleList<T>* p = List;struct DoubleList<T>* q = List->tail;while (q->data != item){p = q;q = p->tail;if (p->tail == List){cout << "未找到指定位置" << endl;return;}}p->tail = Node;Node->front = p;Node->tail = q;q->front = Node;}void DeleteListTail(DoubleList<T>* List){if (IsEmptyList(List)){cout << "链表为空无法删除" << endl;return;}DoubleList<T>* p = List;DoubleList<T>* q = List->tail;while (q->tail != List){p = q;q = p->tail;}List->front =p;p->tail = List;delete q;}void DeleteListAppoin(DoubleList<T>* List, T item){if (IsEmptyList(List)){cout << "链表为空无法删除" << endl;return;}DoubleList<T>* p = List;DoubleList<T>* q = List->tail;while (q->data != item){p = q;q = p->tail;if (p->tail == List){cout << "未找到指定位置" << endl;return;}}p->tail = q->tail;q->tail->front = p;delete q;}};int main(){struct DoubleList<int> myList;DoubleList<int> * List=myList.CreateList();myList.InsertHeadOrTail(List, 1);myList.InsertHeadOrTail(List, 2);myList.InsertHeadOrTail(List, 3);myList.InsertHeadOrTail(List, 5);myList.InsertNodeAppoin(List, 4,5);myList.PrintList(List);cout << "尾删除" << endl;myList.DeleteListTail(List);myList.PrintList(List);cout << "指定位置删除" << endl;myList.DeleteListAppoin(List, 2);myList.PrintList(List);system("pause");return 0;}
阅读全文
0 0
- 数据结构-----双向循环链表
- 数据结构 -- 双向循环链表
- 数据结构--循环双向链表
- 数据结构(双向循环链表)
- 数据结构-双向循环链表
- 数据结构-双向循环链表
- 【数据结构】双向循环链表实现
- 数据结构课程设计_双向循环链表
- 数据结构之双向循环链表06
- 数据结构--双向非循环链表
- 数据结构之双向循环链表
- 数据结构通用双向循环链表实现
- 数据结构之双向循环链表
- 数据结构(18)双向循环链表
- 数据结构_双向循环链表
- 数据结构之双向循环链表
- 数据结构--双向循环链表C实现
- 内核数据结构之双向循环链表
- Struts2 上传文件 404
- Java变量、数据类型
- bzoj1853[Scoi2010]幸运数字 容斥原理
- kobuki驱动通信规范
- iOS-仿小圆点效果
- 数据结构-双向循环链表
- 将图像转为TFRecord文件并读取TFRecord文件
- java类加载时机
- 排序算法入门之选择排序(java实现)
- Linux下vim的使用
- JQuery学习总结笔记1
- uva 10765 (求去掉每一个一个点 可以得到联通块的个数 )
- webView加载数据内容
- FPGA顶会