美文网首页程序员
数据结构_无头结点链表的插入定位和删除操作

数据结构_无头结点链表的插入定位和删除操作

作者: 星girl | 来源:发表于2018-06-11 15:11 被阅读18次

不带头结点的单链表各种操作(定位,插入,删除)的实现,从中可以明白单链表带头结点的优势,可以保证循环代码的一致性,而无需分支判断。

include<stdio.h>

include<stdlib.h>

//定义结构体类型
typedef struct linktable {
float m;
struct linktable * Next;
}node;

//打印单链表
void showprint(node *L) {
while (L != NULL) {
printf("%f->", L->m);
L = L->Next;

}

}

//单链表定位
int loction(node* L,float datas) {
int count = 0;
while (L->m != datas)
{ L = L->Next;
count++;
}//of while
return count;
}

//向单链表插入数据
void Insert(node* L, float datas,int index){
node * new= (node *)malloc(sizeof(node));
new->m = datas;
new->Next = NULL;
int count = 0;
if (index == 0) {
new->Next = L;
showprint(new);
}
else
{
while (count != index - 1) {
L = L->Next;
count++;
}
new->Next = L->Next;
L->Next = new;
}

}

//删除单链表数据
node* DeleteData(node * L, int index) {
int count = 0;
if (index == 0) {
node * r = L;
L = L->Next;
free(r);
}else{
node *top = L;
while (count != index-1) {
top = top->Next;
}
node *p = top->Next;
node *q = p->Next;
p->Next = NULL;
top->Next = q;
free(p);
}
return L;
}

void main() {
node * node1 = (node )malloc(3sizeof(node));
node1->Next=(node *)malloc(1 * sizeof(node));
node1->Next->Next = (node *)malloc(1 * sizeof(node));
node1->m = 2.1;
node1->Next->m = 3.1;
node1->Next->Next->m = 5.1;
node1->Next->Next->Next = NULL;
int a = loction(node1, 3.1);
printf("count=%d",a);
printf("\n");
showprint(node1);
printf("\n");
Insert(node1, 6.8, 0);
//showprint(node1);
printf("\n");
Insert(node1, 8.8, 1);
showprint(node1);
printf("\n");
node * b=DeleteData(node1, 0);
showprint(b);
printf("\n");
node * c = DeleteData(b, 1);
showprint(c);
printf("\n");
}
----------------------------------操作运行结果-------------------------------

无头结点单链表操作.png

上文代码中的插入模块有点点小问题,你们看出来了吗?欢迎大家留言自己的观点。


插画1.png

相关文章

  • 线性表的链式存储----单链表

    单链表 建立单链表 头插法 尾插法 插入结点 表头插入 表尾插入 表内插入 指定位置插入(如下) 删除结点

  • 数据结构_无头结点链表的插入定位和删除操作

    不带头结点的单链表各种操作(定位,插入,删除)的实现,从中可以明白单链表带头结点的优势,可以保证循环代码的一致性,...

  • 线性表元素插入和删除

    单链表(链式存储结构)插入 单链表(链式存储结构)删除 有头结点的单链表在开始结点前插入元素等同在头结点后插入元素...

  • 线性表

    [TOC] 带头结点的单向链表 获取元素 指定位置插入一个结点 指定删除一个结点 循环双向链表 定义 指定位置插入...

  • 数据结构之链表及其栈和队列的实现

    链表的基本操作 定义 从链表头部插入元素 从链表头部删除元素 从链表尾部插入元素 从中间插入和删除结点 栈和对列的...

  • C语言基础 之 链表操作

    链表的操作 对链表的主要操作有建立链表、结构的查找与输出、结点数据的删除和结点数据的插入示例 动态链表的建立 动态...

  • Python--单向链表

    单链表python实现 节点实现 单链表操作 头部插入 尾部添加 在index位置插入 删除结点

  • 数据结构复习整理

    1、用链表表示线性表的优点是(便于插入和删除操作) 2、单链表中,增加头结点的目的是(方便运算的实现) 3、栈和队...

  • 0x04双向链表

    1 创建双向链接 2 双向链表插入元素 3删除双向链表指定位置上的结点 4 删除双向链表指定的元素 5 在双向链表...

  • 数据结构与算法04-双向链表以及双向循环链表

    一、双向链表 0、定义结点 1、创建双向链接 2、打印循环链表的元素 3、双向链表插入元素 4、删除双向链表指定位...

网友评论

    本文标题:数据结构_无头结点链表的插入定位和删除操作

    本文链接:https://www.haomeiwen.com/subject/gssqeftx.html