链表基本操作(创建,插入,查找,删除)-C语言
2018-01-11 17:27
866 查看
Demo地址:https://github.com/RainManGO/NodeLink
工具:Xcode
打印结果:
请输入分数:2
请输入分数:3
请输入分数:3
请输入分数:4
请输入分数:2
打印链表如下:
2.00
3.00
3.00
4.00
2.00
第3个链表值为:3.00
打印链表如下:
2.00
3.00
3.00
6.60
4.00
2.00
打印链表如下:
2.00
3.00
6.60
4.00
2.00
打印链表如下:
2.00
3.00
6.60
4.00
2.00
Program ended with exit code: 0
工具:Xcode
// | |
// main.c | |
// Node | |
// | |
// Created by apple on 2018/1/3. | |
// Copyright © 2018年 ZY. All rights reserved. | |
// | |
#include <stdio.h> | |
#include <stdlib.h> | |
typedef struct Student{ | |
float score; | |
struct Student * next; | |
}STU; | |
#pragma mark 链表的创建 | |
#if 0 | |
//头插入法建表 | |
STU * creat_LinkList(int n) | |
{ | |
float score; | |
STU *head, *p; | |
head = (STU *)malloc(sizeof(STU)); | |
head->next = NULL; | |
for (int i=0; i<n; i++) { | |
printf("请输入分数:"); | |
scanf("%f",&score); | |
p = (STU *)malloc(sizeof(STU)); | |
if (p!=NULL) { | |
p->score = score; | |
p->next = head->next; | |
head->next = p; | |
}else{ | |
printf("分配内存失败"); | |
} | |
} | |
return head; | |
} | |
#else | |
//尾插入建表 | |
STU * creat_LinkList(int n){ | |
float score; | |
STU * head , *p,*q; | |
head = p = (STU *)malloc(sizeof(STU)); | |
p->next=NULL; | |
for (int i=0; i<n; i++) { | |
printf("请输入分数:"); | |
scanf("%f",&score); | |
q = (STU *)malloc(sizeof(STU)); | |
if (p!=NULL) { | |
q->score = score; | |
q->next=p->next; | |
p->next = q; | |
p=q; | |
}else{ | |
printf("分配内存失败"); | |
} | |
} | |
return head; | |
} | |
#endif | |
#pragma mark 链表的查找 | |
//指定个数查找 | |
float getScore(STU * Node,int i){ | |
int j = 1; | |
STU * p = Node->next; | |
while (p->next!=NULL&&j<i){ | |
p=p->next; | |
j++; | |
}; | |
if (i==j) { | |
return p->score; | |
}else{ | |
return 0.f; | |
} | |
} | |
//根据数据值查找节点 | |
STU * getStudent(STU * headLink,float score){ | |
STU * p = headLink; | |
while (p->next!=NULL||p->score!=score) { | |
p=p->next; | |
} | |
if (p->score==score) { | |
return p; | |
} | |
return NULL; | |
} | |
#pragma mark 链表的插入 | |
STU * insertStudent(STU * headLink,int i,float score){ | |
int j=1; | |
STU * q; | |
STU * p = headLink->next; | |
while (p!=NULL &&j<i-1) { | |
p=p->next; | |
j++; | |
} | |
if (j==i-1) { | |
q = (STU*)malloc(sizeof(STU)); | |
q->score = score; | |
q->next=p->next; | |
p->next=q; | |
} | |
return headLink; | |
} | |
#pragma mark 链表的删除 | |
//删除第几个节点 | |
STU * deleteStudent(STU * headLink,int i){ | |
int j; | |
STU *p,*q; | |
p = headLink;j=0; | |
q = headLink->next; | |
while (p->next!=NULL&&j<i) { | |
p=q; | |
q=q->next; | |
j++; | |
} | |
if (j==i) { | |
p->next=q->next; | |
free(q); | |
} | |
return headLink; | |
} | |
//按值删除所有节点 | |
STU * deleteStudentByScore(STU * headLink,float score){ | |
STU *p,*q; | |
p = headLink; | |
q = headLink->next; | |
while (p!=NULL) { | |
if (q->score==score) { | |
p->next=q->next; | |
free(q); | |
q=p->next; | |
}else{ | |
p=q; | |
q=q->next; | |
} | |
} | |
return headLink; | |
} | |
//删除重复节点 | |
void deleteSameDataNode(STU * headLink){ | |
STU *p,*q,*p1; | |
p=headLink->next; | |
while (p->next!=NULL) { | |
q=p; | |
p1=p->next; | |
while (p1->next!=NULL) { | |
if (p->score==p1->score) { | |
q->next=p1->next; | |
free(p1); | |
p1=q->next; | |
}else{ | |
q=p1; | |
p1=p1->next; | |
} | |
} | |
p=p->next; | |
} | |
} | |
void printfLink(STU * headLink){ | |
STU * p = headLink->next; | |
printf("打印链表如下:\n"); | |
while (p!=NULL) { | |
printf("%.2f\n",p->score); | |
p=p->next; | |
} | |
printf("\n"); | |
} | |
int main(int argc, const char * argv[]) { | |
//创建链表 | |
STU * nodeLink = creat_LinkList(5); | |
printfLink(nodeLink); | |
//根据序号查找链表节点值 | |
printf("第%d个链表值为:%.2f\n",3,getScore(nodeLink,3)); | |
//链表值的插入 | |
insertStudent(nodeLink,4,6.6); | |
printfLink(nodeLink); | |
//删除链表的值 | |
deleteStudent(nodeLink,1); | |
printfLink(nodeLink); | |
//删除重复节点 | |
deleteSameDataNode(nodeLink); | |
printfLink(nodeLink); | |
return 0; | |
} |
请输入分数:2
请输入分数:3
请输入分数:3
请输入分数:4
请输入分数:2
打印链表如下:
2.00
3.00
3.00
4.00
2.00
第3个链表值为:3.00
打印链表如下:
2.00
3.00
3.00
6.60
4.00
2.00
打印链表如下:
2.00
3.00
6.60
4.00
2.00
打印链表如下:
2.00
3.00
6.60
4.00
2.00
Program ended with exit code: 0
相关文章推荐
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 单链表基本操作的实现--创建、插入、查找、删除
- C语言实现双链表基本操作(创建、查找、插入、删除)
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 用C语言编写一个包含链表的初始化、插入、删除、查找等基本操作的程序。
- c语言链表基本操作(带有创建链表 删除 打印 插入)
- 链表(1)基本操作:创建,插入,删除,销毁等(模板类实现)
- 链表(单双链表)用法与基本操作(构建、查找、插入、删除)实现
- 链表基本操作(删除,插入,查找)
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 单链表的基本操作(查找,插入,删除)
- C语言---双向链表的插入、删除、查找操作
- 算法学习-数据结构之链表操作,创建,插入,删除,查找。