c语言实现基本的数据结构(二) 链表(包括链表的三种简单排序算法)
#include "stdafx.h"
#include <stdlib.h>
//创建一个节点,data为value,指向NULL
Node* Create(int value){
Node* head = (Node*)malloc(sizeof(Node));
head->data = value;
head->next = NULL;
return head;
}
//销毁链表
bool Destroy_List(Node* head){
Node* temp;
while (head){
temp = head->next;
free(head);
head = temp;
}
head = NULL;
return true;
}
//表后添加一个节点,Create(value)
bool Append(Node* head,int value){
Node* n = Create(value);
Node* temp = head;
while (temp->next){
temp = temp->next;
}
temp->next = n;
return ;
}
//打印链表
void Print_List(Node* head){
Node* temp = head->next;
while (temp){
printf("%d->", temp->data);
temp = temp->next;
}
printf("\n");
}
//在链表的第locate个节点后(头节点为0)插入创建的节点Create(value)
bool Insert_List(Node* head, int locate, int value){
Node* temp = head;
Node* p;
Node* n = Create(value);
if (locate < )
return false;
while (locate--){
if (temp->next == NULL){
temp->next = Create(value);
return true;
}
temp = temp->next;
}
p = temp->next;
temp->next = n;
n->next = p;
return true;
}
//删除第locate个节点后(头节点为0)的节点
bool Delete_List(Node* head, int locate){
Node* temp = head;
Node* p;
if (locate < )
return false;
while (locate--){
if (temp == NULL){
return false;
}
temp = temp->next;
}
p = temp->next->next;
free(temp->next);
temp->next = NULL;
temp->next = p;
return true;
}
//获取链表长度(不包括头节点)
int Size_List(Node* head){
Node* temp = head;
int size = ;
while (temp->next){
temp = temp->next;
size++;
}
return size;
}
//链表的三种排序(选择,插入,冒泡)
bool Sort_List(Node* head){
int t = ;
int size = Size_List(head);
//选择排序
/*for (Node* temp = head->next; temp != NULL; temp = temp->next){
for (Node* p = temp; p != NULL; p = p->next){
if (temp->data > p->data){
printf("换%d和%d\n", temp->data, p->data);
t = temp->data;
temp->data = p->data;
p->data = t;
}
}
}*/
//插入排序
/*for (Node* temp = head->next->next; temp != NULL; temp = temp->next){
for (Node* p = head; p->next != NULL; p = p->next){
if (p->next->data > temp->data)
{
printf("换%d和%d\n", temp->data, p->next->data);
t = temp->data;
temp->data = p->next->data;
p->next->data = t;
}
}
}*/
//冒泡排序
for (Node* temp = head->next; temp->next != NULL; temp = temp->next){
for (Node* p = head->next; p->next != NULL; p = p->next){
if (p->data > p->next->data){
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
}
}
return ;
}
c语言实现基本的数据结构(二) 链表(包括链表的三种简单排序算法)的更多相关文章
- 几种经典排序算法的R语言描述
1.数据准备 # 测试数组 vector = c(,,,,,,,,,,,,,,) vector ## [] 2.R语言内置排序函数 在R中和排序相关的函数主要有三个:sort(),rank(),ord ...
- O(n*logn)级别的算法之二(快速排序)的三种实现方法详解及其与归并排序的对比
一,单路快排1.测试用例: #ifndef INC_06_QUICK_SORT_DEAL_WITH_NEARLY_ORDERED_ARRAY_SORTTESTHELPER_H #define INC_ ...
- 几种常见排序算法的基本介绍,性能分析,和c语言实现
本文介绍6种常见的排序算法,以及他们的原理,性能分析和c语言实现: 为了能够条理清楚,本文所有的算法和解释全部按照升序排序进行 首先准备一个元素无序的数组arr[],数组的长度为length,一个交换 ...
- linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10 一.虚拟网络三种连接方式 当在V ...
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...
- java学习总结篇二--3 种简单排序
本篇文章,先从数据结构开始,一边总结,一边反思,寻求最优解. 本文简单温习下最基础的三类算法:选择,冒泡,插入.先定义一个交换数组作为备用: /** * 交换数组元素 * @param arr * @ ...
- Hibernate学习(二)———— 一级缓存和三种状态解析
一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1.首先sessi ...
- WPF路由事件二:路由事件的三种策略
一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...
- 8种主要排序算法的C#实现 (二)
归并排序 归并排序也是采用“分而治之”的方式.刚发现分治法是一种算法范式,我还一直以为是一种需要意会的思想呢. 不好意思了,孤陋寡闻了,哈哈! 原理:将两个有序的数列,通过比较,合并为一个有序数列. ...
随机推荐
- SVN中trunk,branches,tags用法详解[重要]
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
- U盘无法格式化解决
我的U盘是fat32格式的,4G以上的东西拖不进去 于是我打算格式化成NTFS的,然后悲剧了,格式化提示windows格式化不成功
- RabbitMQ中文文档PHP版本(三)--工作队列
2019年12月10日09:57:52 原文:https://www.rabbitmq.com/tutorials/tutorial-two-php.html
- Oracle 实现表中id字段自增长
Oracle 实现表中id字段自增长 最近正在学习Oracle的时候发现Oracle表中的字段不能像mysql中那样可以用auto increment修饰字段从而让id这种主键字段实现自增长. 那Or ...
- 【Maven学习】定制库到Maven本地资源库
目标:手工操作将一个jar安装到本地仓库 第一步:首先获取到jar包,可以是第三方的 也可以是自己创建的,放到本地任意目录 比如:joda-time-2.10.3,放到C:\jar\ 目录下面 第二 ...
- [Linux] - Manjaro ARM 系统配置(更新镜像源,安装 Docker 和 Dotnet Core)
硬件:Raspberry Pi 4B系统:Manjaro-ARM-xfce-rpi4-19.08网址:https://manjaro.org/ Issue系统启动后,中文字符显示为小方格乱码 解决:安 ...
- 测试类——python编程从入门到实践
1.各种断言方法 常用断言方法: 方法 用途 assertEqual(a, b) 核实a == b assertNotEqual(a, b) 核实a != b assertTrue(x) 核实x为Tr ...
- 【爬坑笔记】c# 如何通过EF Core读写sql server的类似double型字段
=============================================== 2019/8/31_第1次修改 ccb_warlock == ...
- ElasticSearch 调优
来源:http://tinyurl.com/y4gnzbje 第一部分:调优索引速度 第二部分-调优搜索速度 英文原文:https://www.elastic.co/guide/en/elastics ...
- spring Boot 学习(二、Spring Boot与缓存)
一.概述1. 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力 2. 消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者 ...