主要功能的实现:

#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;
}

动态链表增删改查及排序功能相关推荐

  1. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  2. 转json_Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  3. Java程序-单链表增删改查(实现对水浒人物的增删改查操作)

    单链表增删改查(实现对水浒人物的增删改查操作) 前言 一.链表(Linked List)介绍 二.应用实例 1.问题描述 2.代码实现 总结 前言 参考:B站,尚硅谷数据结构与算法 课程 一.链表(L ...

  4. java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码

    [实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...

  5. 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】

    文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...

  6. (数据结构与算法)单链表与双链表增删改查的实现。

    文章目录 链表介绍 1. 单链表应用实例 1.1 实现思路 1.2 代码实现 2.单链表常见面试题 2.1 求单链表中有效节点的个数 2.2 查找单链表中倒数第K个节点 2.3 单链表的反转 2.4 ...

  7. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  8. Spring Boot 学习[四] web项目实战训练(增删改查,分页,排序)

    Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等. 几点说明: Spring boot开发web项目,通常打成 ...

  9. Python项目:学生管理系统连接MySQL数据库(增删改查、排序、统计、显示所有信息)

    文章目录 一程序功能(Function) 1. 功能概述 2. 思维导图 二.开始实践 战前准备 定义学生管理系统菜单 定义主函数 1.录入学生信息 2.查找学生信息 3.删除学生信息 4.修改学生信 ...

最新文章

  1. spring boot基础教程之文件上传下载
  2. NFS 服务学习笔记
  3. CSS 如何让Table的里面TD全有边框 而Table的右左边框没有
  4. LeetCode 829. 连续整数求和(数学)
  5. java ejb项目_Maven创建EJB项目结构
  6. “互联网+”为移动医疗提供的七大有力武器!
  7. tcpdump命令速查
  8. hdu 1978 How many ways
  9. 计算机对log取反函数,ln计算(log计算器在线)
  10. Android性能优化最佳实践,分享一点面试小经验
  11. 计算机和信息系统安全保密管理规定,图文信息中心 计算机信息系统安全保密管理规定...
  12. Word中查找替换软回车键和回车键
  13. Introductions和Advisors标签
  14. [SV]SystemVerilog Structured Procedures --- always_comb、always_ff、always_latch
  15. 【统计】时间序列预测之 Holt-Winters 指数平滑模型
  16. 如何成为早起者(二)
  17. 21.BOM的理解,常见的BOM对象你了解哪些?
  18. Jinja2渲染的两种方式
  19. crh寄存器_寄存器-相关博客帖子 - 电子工程世界-论坛
  20. web CSS 颜色渐变代码

热门文章

  1. 数据结构-单链表(C语言代码)
  2. 自定义本地Maven 仓库 配置
  3. docker-compose.yml 启动jar 包
  4. 小能量汇聚成大能量_清体能量棒配料解析:小种子,大能量,藜麦和青稞
  5. java内部错误2755_内部错误2755.(安装软件出问题啦)
  6. 实现JavaSrcipt页面的跳转
  7. 2021-05-20 Matlab实现傅里叶变换
  8. linux vi/vim使用
  9. Python 中 pass的使用
  10. eclipse里source的快捷方法_Eclipse开发必备快捷键