复杂的链式存储结构
  循环链表
    定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环)
    优点:从表中任一节点出发均可找到表中其他结点
    注意:涉及遍历操作时,终止条件是判断 p->next == L?
  双向链表
    定义:在单链表的每个结点离再增加一个指向直接前驱的指针域 prior,这样链表中就形成了有
      两个方向不用的链,故称为双向链表
  双向循环链表
    定义:
      和单链的循环表类似,双向链表也可以有循环表
      ·让头节点的前驱指针指向链表的最后一个结点
      ·让最后一个结点的后继指针指向头结点
    示例图(2张):

  

注意:
  在双向链表中有些操作(如:ListLength、GetElem等),
  因仅涉及一个方向的指针,故它们的算法与线性链表的相同。
  但在插入、删除时,需同时修改两个方向上的指针
算法:

  

            #include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
// 双向循环链表
typedef struct Londe{
int number;
struct Londe *prev; //
struct Londe *next;
}Londe;
typedef Londe *Linklist; // LinkList为指向结构体 Londe 的指针类型
// 初始化
int initList_L(Linklist *L);
// 通过索引获取结点对象
Linklist getLinkListByI(Linklist *L,int i);
// 遍历结点
int showList_L(Linklist L);
// 插入数据
int insertList_L(Linklist *L,int number);
// 删除指定索引的结点
int delLinkByI(Linklist *L,int i);
int main(void){
Linklist L = NULL;
// 初始化单链表
initList_L(&L);
// 插入数据
insertList_L(&L,);
insertList_L(&L,);
delLinkByI(&L,);
showList_L(L);
}
// 初始化
int initList_L(Linklist *L){
Linklist node = (Linklist)malloc(sizeof(Londe));
if(!node){
return ERROR;
}
node->number = ;
node->next = node;
node->prev = node;
*L = node;
return OK;
}
// 插入数据
int insertList_L(Linklist *L,int number){
Linklist node = (Linklist)malloc(sizeof(Londe)); if(!node){
return ERROR;
} node->number = number; (*L)->prev->next = node;
node->prev = (*L)->prev;
node->next = (*L);
(*L)->prev = node;
return OK;
}
// 遍历结点
int showList_L(Linklist L){
Linklist temp = L;
do{
printf("前驱指针%p;值:%d;后继指针%p \n",L->prev,L->number,L->next);
L = L->next;
}while(temp != L);
return OK;
}
// 通过索引获取结点对象
Linklist getLinkListByI(Linklist *L,int i){
int ii = ;
Linklist T = *L;
while(ii != i){
T = T->next;
ii++;
}
return T;
}
// 删除指定索引的结点
int delLinkByI(Linklist *L,int i){
printf("打点1");
Linklist temp = getLinkListByI(L,i);
printf("值是%d \n",temp->number);
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
return OK;
}

最新文章

  1. iOS事件传递-&gt;处理-&gt;响应
  2. 【转载】STL之priority_queue
  3. 虚拟机VMWARE上ORACLE License 的计算
  4. SSL certificate problem unable to get local issuer certificate解决办法
  5. C# 中间语言、CLR、CTS、CLS
  6. Stimulsoft Reports筛选数据来绑定显示2个报表
  7. NPAPI插件开发
  8. 【转载】JavaEE权限管理分析
  9. lazyman学习
  10. android 20 Intnet类重要的成员变量
  11. Mysql int(11) 和 int(1)
  12. curl 基本使用简介
  13. HTML页面的动画的制作及性能
  14. java基础(八章)
  15. 如何学习LoadRunner性能测试?
  16. Django 初识
  17. Storm入门(七)可靠性机制代码示例
  18. ubuntu tensorflow install(Ubuntu16.04+CUDA9.0+cuDNN7.5+Python3.6+TensorFlow1.5)
  19. PHP 常用设计模式 (转载)
  20. redis五种数据类型的使用场景

热门文章

  1. python读取mongodb并提供接口
  2. web框架的基础原理
  3. centos python虚拟环境安装
  4. rownum按某字段排序查询
  5. vitualbox安装centos7卡死
  6. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) (优先队列)
  7. nginx反向代理(1)
  8. nodeJS菜鸟教程笔记
  9. LeetCode Continuous Subarray Sum 题解 同余前缀和 Hash表
  10. LeetCode 3sum-closest 题解