动态链表增删改查及排序功能
主要功能的实现:
#include "SeqList.h"
void InitSeqList(SeqList * pSeq)//初始化
{assert(pSeq);pSeq->array = (DataType*)malloc(sizeof(DataType)*DEFAULT_CAPICITY);pSeq->size = 0;pSeq->capicity = DEFAULT_CAPICITY;
}
void PrintSeqList(SeqList* pSeq)//打印
{assert(pSeq);size_t i = 0;for (; i < pSeq->size; i++){printf("%d", pSeq->array[i]);}printf("\n");
}void CheckExpandCapicity(SeqList* pSeq)//检查容量
{assert(pSeq);if (pSeq->size == pSeq->capicity){DataType *tmp = (DataType *)malloc(pSeq->capicity * 2 * sizeof(DataType));memcpy(tmp, pSeq->array, sizeof(DataType)*pSeq->size);free(pSeq->array);pSeq->array = tmp;pSeq->capicity = pSeq->capicity * 2;}
}
void PushFront(SeqList* pSeq, DataType x)//头插
{int i = 0;assert(pSeq);CheckExpandCapicity(pSeq);for (i = pSeq->size; i >= 1; i--){pSeq->array[i] = pSeq->array[i - 1];}pSeq->array[0] = x;pSeq->size++;
}void PopFront(SeqList* pSeq)//头删
{size_t i = 0;assert(pSeq);for (; i < pSeq->size - 1; i++){pSeq->array[i] = pSeq->array[i + 1];}pSeq->size--;}
void PushBack(SeqList* pSeq, DataType x)//尾插
{assert(pSeq);CheckExpandCapicity(pSeq);pSeq->array[pSeq->size] = x;pSeq->size++;
}
void PopBack(SeqList* pSeq)//尾删
{assert(pSeq);pSeq->size--;
}void Insert(SeqList* pSeq, size_t index, DataType x)//在index位置插入
{size_t i = pSeq->size;assert(pSeq);assert(index < pSeq->size);CheckExpandCapicity(pSeq);for (; i >index; i--){pSeq->array[i] = pSeq->array[i - 1];}pSeq->array[index] = x;pSeq->size++;
}
void Modify(SeqList* pSeq, size_t index, DataType x)//改动
{assert(pSeq);assert(index < pSeq->size);pSeq->array[index] = x;
}
void Remove(SeqList* pSeq, size_t index)//删除index位置的数
{size_t i = index;assert(pSeq);assert(index < pSeq->size);for (; i < pSeq->size - 1; i++){pSeq->array[i] = pSeq->array[i + 1];}pSeq->size--;
}
void Swap(DataType* left, DataType* right)
{DataType tmp = *left;*left = *right;*right = tmp;
}
void BubbleSort(SeqList* pSeq)//冒泡排序
{size_t index, end;int exchange = 0;assert(pSeq);for (end = pSeq->size - 1; end > 0; --end){exchange = 0;for (index = 0; index < end; index++){if (pSeq->array[index]>pSeq->array[index + 1]){Swap(pSeq->array + index, pSeq->array + index + 1);exchange = 1;}}if (exchange == 0){break;}}
}
void SelectSort(SeqList* pSeq)//选择排序
{size_t MinIndex, index, begin;assert(pSeq);for (begin = 0; begin < pSeq->size - 1; begin++){MinIndex = begin;for (index = begin + 1; index < pSeq->size; index++){if (pSeq->array[MinIndex]>pSeq->array[index]){MinIndex = index;}}if (MinIndex != begin){Swap(pSeq->array + MinIndex, pSeq->array + begin);}}
}
FindRet BinarySearch(SeqList* pSeq, DataType x)//二分查找
{size_t left=0;size_t right = pSeq->size - 1;;size_t middle;FindRet ret;ret.isFind = FALSE;assert(pSeq);while (left<=right){middle = (left + right) / 2;if (x == pSeq->array[middle]){ret.isFind = TRUE;ret.index = middle;return ret;}else if (x>pSeq->array[middle])left = middle + 1;elseright = middle - 1;}return ret;
}
头文件:
#pragma once#define DEFAULT_CAPICITY 3
typedef int DataType;#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<malloc.h>typedef struct SeqList
{DataType *array;size_t size;size_t capicity;//当前的容量
}SeqList;typedef enum Tag
{TRUE, // 真FALSE, // 假
}Tag;typedef struct FindRet
{Tag isFind; // 是否找到的标示size_t index; // 找到数据的下标
}FindRet;void InitSeqList(SeqList *pSeq);
void PrintSeqList(SeqList *pSeq);void CheckExpandCapicity(SeqList* pSeq);void PushFront(SeqList *pSeq, DataType x);
void PopFront(SeqList *pSeq);void PushBack(SeqList *pSeq, DataType x);
void PopBack(SeqList *pSeq);void Insert(SeqList *pSeq, size_t index, DataType x);
void Modify(SeqList *pSeq, size_t index, DataType x);
void Remove(SeqList *pSeq, size_t index);void Swap(DataType* left, DataType* right);
void BubbleSort(SeqList* pSeq);
void SelectSort(SeqList* pSeq);
FindRet BinarySearch(SeqList* pSep, DataType x);
測试程序部分:
#include "SeqList.h"void test1()//測试初始化、打印、尾插/尾删
{SeqList s;InitSeqList(&s);PushBack(&s, 1);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PrintSeqList(&s);PopBack(&s);PrintSeqList(&s);}
void test2()//測试头插、头删
{SeqList s;InitSeqList(&s);PushFront(&s, 3);PushFront(&s, 4);PushFront(&s, 5);PushFront(&s, 6);PrintSeqList(&s);PopFront(&s);PrintSeqList(&s);
}
void test3()//測试在index位置插入、改动index位置的值、删除index位置的值
{SeqList s;InitSeqList(&s);PushBack(&s, 1);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PrintSeqList(&s);Insert(&s, 2, 8);PrintSeqList(&s);Modify(&s,2,5);PrintSeqList(&s);Remove(&s, 2);PrintSeqList(&s);
}
void test4()//測试冒泡排序
{SeqList s;InitSeqList(&s);PushBack(&s, 3);PushBack(&s, 1);PushBack(&s, 5);PushBack(&s, 4);PushBack(&s, 2);PrintSeqList(&s);BubbleSort(&s);PrintSeqList(&s);
}
void test5()//測试选择排序
{SeqList s;InitSeqList(&s);PushBack(&s, 3);PushBack(&s, 1);PushBack(&s, 5);PushBack(&s, 4);PushBack(&s, 2);PrintSeqList(&s);SelectSort(&s);PrintSeqList(&s);
}
void test6()//測试二分搜索
{DataType x;FindRet ret;SeqList s;InitSeqList(&s);PushBack(&s, 1);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PushBack(&s, 5);x = 4;ret = BinarySearch(&s, x);if (ret.isFind == TRUE){printf("%d %d\n",x,ret.index);}elseprintf("find failed!\n");x = 8;ret = BinarySearch(&s, x);if (ret.isFind == TRUE){printf("%d %d", x, ret.index);}elseprintf("find failed!\n");x = 1;ret = BinarySearch(&s, x);if (ret.isFind == TRUE){printf("%d %d\n", x, ret.index);}elseprintf("find failed!\n");x = 5;ret = BinarySearch(&s, x);if (ret.isFind == TRUE){printf("%d %d\n", x, ret.index);}elseprintf("find failed!\n");}
int main()
{test1();test2();//test3();test4();test5();test6();getchar();return 0;
}
动态链表增删改查及排序功能相关推荐
- Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- 转json_Java对象转JSON时如何动态的增删改查属性
1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...
- Java程序-单链表增删改查(实现对水浒人物的增删改查操作)
单链表增删改查(实现对水浒人物的增删改查操作) 前言 一.链表(Linked List)介绍 二.应用实例 1.问题描述 2.代码实现 总结 前言 参考:B站,尚硅谷数据结构与算法 课程 一.链表(L ...
- java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码
[实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...
- 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】
文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...
- (数据结构与算法)单链表与双链表增删改查的实现。
文章目录 链表介绍 1. 单链表应用实例 1.1 实现思路 1.2 代码实现 2.单链表常见面试题 2.1 求单链表中有效节点的个数 2.2 查找单链表中倒数第K个节点 2.3 单链表的反转 2.4 ...
- java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...
- Spring Boot 学习[四] web项目实战训练(增删改查,分页,排序)
Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等. 几点说明: Spring boot开发web项目,通常打成 ...
- Python项目:学生管理系统连接MySQL数据库(增删改查、排序、统计、显示所有信息)
文章目录 一程序功能(Function) 1. 功能概述 2. 思维导图 二.开始实践 战前准备 定义学生管理系统菜单 定义主函数 1.录入学生信息 2.查找学生信息 3.删除学生信息 4.修改学生信 ...
最新文章
- spring boot基础教程之文件上传下载
- NFS 服务学习笔记
- CSS 如何让Table的里面TD全有边框 而Table的右左边框没有
- LeetCode 829. 连续整数求和(数学)
- java ejb项目_Maven创建EJB项目结构
- “互联网+”为移动医疗提供的七大有力武器!
- tcpdump命令速查
- hdu 1978 How many ways
- 计算机对log取反函数,ln计算(log计算器在线)
- Android性能优化最佳实践,分享一点面试小经验
- 计算机和信息系统安全保密管理规定,图文信息中心 计算机信息系统安全保密管理规定...
- Word中查找替换软回车键和回车键
- Introductions和Advisors标签
- [SV]SystemVerilog Structured Procedures --- always_comb、always_ff、always_latch
- 【统计】时间序列预测之 Holt-Winters 指数平滑模型
- 如何成为早起者(二)
- 21.BOM的理解,常见的BOM对象你了解哪些?
- Jinja2渲染的两种方式
- crh寄存器_寄存器-相关博客帖子 - 电子工程世界-论坛
- web CSS 颜色渐变代码