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#实现 (二)
归并排序 归并排序也是采用“分而治之”的方式.刚发现分治法是一种算法范式,我还一直以为是一种需要意会的思想呢. 不好意思了,孤陋寡闻了,哈哈! 原理:将两个有序的数列,通过比较,合并为一个有序数列. ...
随机推荐
- LeetCode_463. Island Perimeter
463. Island Perimeter Easy You are given a map in form of a two-dimensional integer grid where 1 rep ...
- maven-archetype-plugin 的正确打开方式
1. 准备好一个编辑好的模板工程 2. 在 pom.xml 中添加 maven-archetype-plugin 插件 <plugin> <groupId>org.apach ...
- 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库
编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...
- MBR和GPT分区
MBR是传统的分区表类型,最大缺点是不支持容量大于2T的硬盘.GPT则弥补了MBR这个缺点,最大支持18EB的硬盘,是基于UEFI使用的磁盘分区架构. 其中,目前所有的Windows系统均支持MBR, ...
- Go 关键字Select
select select 是Go语言中常用的一个关键字,Linux再也早也引入了这个函数,用来实现非阻塞的一种方式,一个select语句用来选择哪个case中的发送或接收操作可以被立即执行.它类似于 ...
- c# EF中equal的用法注意
Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...
- WPF 程序的编译过程
原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...
- 微信小程序文档
提示框: wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明: 示例代码: wx.showToast({ title: '成功', icon: 'success', dur ...
- EditPlus中文版 安装教程
EditPlus中文版安装教程 1.下载软件压缩包,解压即可.不需要安装,解压后打开“EditPlus中文版”文件夹(软件我会打包好,在文中的最低端找到即可下载:若链接失效了,请告知我一声,我会重新更 ...
- 2017-07-25 PDO预处理以及防止sql注入
首先来看下不做任何处理的php登录,首先是HTML页面代码 <html> <head><title>用户登录</title></head> ...