#include<stdio.h>
#include<stdlib.h>int typeOfLinkList;typedef struct LNode{int data;struct LNode *next;
}LNode, *LoopLinkList;/* 基本算法(遍历) */
void show(LNode *L, int n)
{int in = 0;printf("  Show: ");do{in ++;printf("%d - ", L->data);L = L->next;}while(L != NULL&&in<n);printf("\n");
}/* 基本算法(查找) 返回节点*/
LNode* find1(LoopLinkList L, int x)
{int index;do{if(x == L->data)return L;elseL = L->next;}while(L != NULL);return NULL;
}
/* 基本算法(查找) 返回索引号*/
int find2(LoopLinkList L, int x)
{int index = 0;do{if(x == L->data)return index;elseL = L->next;index ++;}while(L != NULL);return 9999;
}
/* 基本算法(插入) */
void insert(LoopLinkList L, int index, int x)
{printf("insert: ");int i = 0;for(i=0;i<index-1&&(L) != NULL; i++, L=(L)->next)//找到要插入的位置{printf("%d - ",(L)->data);}LNode *node = (LNode*)malloc(sizeof(LNode));//新建节点node->data = x;//赋值 node->next = (L)->next;//新节点next替换掉next(L)->next = node;//next重新指向新节点printf("\n");
}
/* 基本算法(删除) */
void Delete(LoopLinkList L, int index)
{int i;for(i=0;i<index-1&&L != NULL;i++,L=L->next);L->next=L->next->next;//隔过去一个节点
}/* 基本算法(逆序建表) 循环单链表*/
LoopLinkList CreatLinkList1(int *a)
{LoopLinkList L = (LNode*)malloc(sizeof(LNode));//申请一个链表头(空头)L->data = a[0];//给这个表头赋值L->next = NULL;//next指向NULLint i = 1;//新建节点LNode *node;LNode *tail = (LNode*)malloc(sizeof(LNode));//标定一个表尾,后面指向表头;tail = L;while(a[i] != 0){node = (LNode*)malloc(sizeof(LNode));//给节点分配空间node->data = a[i];//给节点赋值node->next = L;//新节点替换掉表头L = node;//表头重新作为表头,指向新增表头节点node = NULL;i++;}tail->next = L;//表尾指向表头return L;
}
/* 基本算法(顺序建表) */
LoopLinkList CreatLinkList2(int *a)
{LoopLinkList L = (LNode*)malloc(sizeof(LNode));//申请一个链表头(空头)L->next = NULL;//next指向NULLLNode *p = L;//让p指向这个链表头p->data = a[0];//给这个表头赋值int i = 1;LNode *node;//新建节点while(a[i] != 0){node = (LNode*)malloc(sizeof(LNode));//给节点分配空间node->data = a[i];//给节点赋值node->next = NULL;//新节点指向空p->next = node;//表头(尾)指向新节点p = node;//表头(尾)指向新的表尾i++;}p->next = L;//表尾指向表头,return L;
}
int main(int argc, char*argv[])
{int a[17] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};LoopLinkList L = CreatLinkList2(a);show(L,17);printf("  find: %d\n",find1(L, 6)->data);printf("  find: %d\n",find2(L, 13));show(L,17);insert(L, 6, 15);show(L,17);Delete(L, 7);show(L,18);return 0;
}

运行结果:

-bash-4.1$ gcc -o a Demo_04_LoopLinkList.c
-bash-4.1$ ./aShow: 1 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 1 - find: 6find: 13Show: 1 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 1 -
insert: 1 - 1 - 2 - 3 - 4 - Show: 1 - 1 - 2 - 3 - 4 - 5 - 15 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - Show: 1 - 1 - 2 - 3 - 4 - 5 - 15 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 1 - 1 -
-bash-4.1$

C语言线性表之循环单链表相关推荐

  1. C语言-线性表基本操作之单链表

    下面是单链表的基本操作: #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct L ...

  2. 线性表的应用 —— 单链表

    线性表的应用 -- 单链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,可以给每个元素都附加一个指针域,指向下一个元素的存储位置. 像这样: 从图中可以看出,每个节点都 ...

  3. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  4. 数据结构(算法)-线性表2(单链表)

    为什么80%的码农都做不了架构师?>>>    /** 单链表 双链表1,空的线性表setNull(L) 2,insert 加入元素 3,根据位置查找元素 4,查找所有元素 5,删除 ...

  5. PHP数据结构之三 线性表中的单链表的PHP实现

    线性表的链式存储:用一组任意的存储单元存储线性表中的数据元素.用这种方法存储的线性表简称线性链表. 链式存储线性表的特点:存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分 ...

  6. [XJTUSE]数据结构学习——第一章 线性表 1.3 单链表的实现(JAVA)

    文章目录 1.3 单链表的实现(JAVA) 1.curr指针与头结点的说明 2.插入和删除操作的说明 插入 删除 1.3 单链表的实现(JAVA) 链表是由一系列叫做表的结点(node)的对象组成的, ...

  7. java线性表合并_单链表的合并(Java实现)

    C语言能做的,Java照样可以做.但是没有指针的操作,可能使人看起来"不舒服".这个博客是为了个人学习算法和数据结构而开的,以后凡是涉及到这方面的内容,我会尽量用Java和C同时实 ...

  8. c语言josephus问题循环链表,循环单链表(C语言,无头节点,附约瑟夫杀人问题)...

    实现以下操作 init 初始化 traverse 遍历 head_add 头追加(),尾追加(尾插法)只需要注释掉函数最后一行的头指针赋值 len 长度 insert 指定位置插入 search 正. ...

  9. 循环单链表及C语言实现

    本博文介绍循环单链表及其C语言的实现 目录 循环单链表 循环单链表的操作 插入 头结点插入 尾结点插入 指定位置插入 删除 头结点删除 尾结点删除 指定位置删除 遍历 查找 循环单链表的C语言实现 循 ...

最新文章

  1. [转载].NET中高效能的socket编程
  2. jdk8 参数为方法_JDK 8中的几乎命名的方法参数
  3. .net平台的MongoDB使用
  4. 如何打造一个让粉丝一见就能收钱的朋友圈
  5. 小白的java学习之路 “ 选择结构(一)”
  6. java实战技巧--关于格式化输出日期
  7. Perl 语言学习笔记
  8. WiRadius认证计费管理系统
  9. 解决无法从Git官网下载Git安装包的具体方法
  10. cognex扫码枪识别内容直接_康耐视cognex DataMan8600系列-手持终端-条码扫描枪-PDA-扫描模块-条码打印机-苏州奥维尔...
  11. Widows下安装和配置Redis
  12. Linux下Tab键补全,报No space left on device错误
  13. 1条命令解决使用kubeadm安装 kubernetes 从 k8s.gcr.io 拉取镜像失败的问题
  14. iOS 模拟器安装APP,在电脑上运行ios的app
  15. php int 32 64,php从32位升级到64位需要注意的几点
  16. excel工具栏隐藏了怎么办_你会用 Excel照相机吗?
  17. TEXT must be immediately followed by END_TAG and not START_TAG (position: START_TAG seen ...<depende
  18. GPON PLOAM消息
  19. 跟软件专家学沟通技巧(二)
  20. QT-桌面电子白板程序

热门文章

  1. MySQL学习-排序与分组函数
  2. 【PHP 面试知识梳理】
  3. APP移动测试用例总结
  4. Java - Thinking in Java 第2章 一切都是对象
  5. day1 java基础回顾-多线程
  6. js方法的使用(z)
  7. CentOS6.5下安装JDK
  8. 利用WPS 2013文字制作精美的信纸的方法
  9. 开机提示ntldr is missing解决方法
  10. iText in Action 2nd5.2节(Events for basic building blocks)读书笔记