#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. 4.65FTP服务4.66测试登录FTP
  2. win7旗舰版下配置IIS服务器
  3. 阿里、拼多多P8面试分享!
  4. jenkins持续集成(一): 在Linux下的安装与配置
  5. 网络测试及故障诊断方法及工具
  6. Heu OJ 解题报告索引
  7. DOM-13 【实战】输入及状态改变事件、京东搜索框
  8. Bginfo软件在域的部署和应用
  9. java jdbc mysql 乱码_【求助】为什么用纯java jdbc插入mysql一直乱码
  10. rsync同步服务部署
  11. php金币格式转换,php 资金格式转换函数_PHP教程
  12. 【OpenCv】cvWaitKey获取键盘值
  13. mysql覆盖索引理解
  14. 东北林业大学计算机科学与技术考研,东北林业大学计算机科学与技术2019年考研加试科目计算机网络专业课大纲...
  15. 坐标反算c语言程序,道路坐标正反算无限个拐点计算器测量程序(新20070825)
  16. linux磁盘阵列数据恢复,Linux数据恢复
  17. 简述7个流行的强化学习算法及代码实现!
  18. Fidder汉化版使用
  19. flutter video_thumbnail #获取视频封面
  20. 计算机网络学习笔记(一) 计算机网络及互联网 Chapter1-Computer NetWorks and the Internet

热门文章

  1. @codeforces - 553E@ Kyoya and Train
  2. 介绍一下Python中webbrowser的用法?
  3. pyspark对应的scala代码PythonRDD类
  4. 实现拷贝函数(strcpy)
  5. APP移动测试用例总结
  6. shellcode编写
  7. VMware虚拟机下实现Linux与window文件夹共享
  8. 在BCB中使用多线程实例
  9. 软件工程概论总结第四章
  10. AJAX 网页保留浏览器前进后退等功能