C简单实现动态顺序表
<span style="font-size:18px;">一下为简单实现:</span> #define SIZE 3;
typedef int DataType;
typedef struct SeqList
{
DataType *array;
size_t size; //数据实际长度
size_t capicity;//扩展后大小
}SeqList; //初始化顺序表
void InitSeqList(SeqList *pSeq)
{
pSeq->capicity = SIZE;
pSeq->array = (DataType*)malloc(sizeof(DataType)*pSeq->capicity);
if(NULL == pSeq->array)
{
printf("分配内存shi:\n");
return;
}
pSeq->size = 0;
} //尾插数据
void PushBack(SeqList *pSeq,DataType x)
{
assert(pSeq);
if(pSeq->size >= pSeq->capicity)//每次插入一个数据,
//size就加一 直到size大于初始容量 就扩容
{
DataType *newpSeq;
pSeq->capicity = (pSeq->capicity)*SIZE;
newpSeq = (DataType*)malloc(sizeof(DataType)*pSeq->capicity);
if(NULL == newpSeq)
{
printf("内存分配失败:\n");
return;
}
memcpy(newpSeq,pSeq->array,sizeof(DataType)*pSeq->size);
free(pSeq->array);
pSeq->array = newpSeq;
pSeq->array[pSeq->size] = x;
pSeq->size++;
}
else
{
pSeq->array[pSeq->size] = x;
pSeq->size++;
}
} //遍历顺序表
void TraverseList(SeqList *pSeq)
{
int i;
for(i = 0; i < pSeq->size; i++)
{
printf("%d\t",pSeq->array[i]);
}
printf("\n");
} //冒泡排序
void BubbleSort(SeqList *s)
{
int i, j, temp;
for(i = 0; i < s->size-1; i++)
{
for(j = 0;j < s->size-i-1; j++)
{
if(s->array[j]>s->array[j+1])
{
temp = s->array[j];
s->array[j] = s->array[j+1];
s->array[j+1] = temp;
}
}
}
} //选择排序
void SeclectSort(SeqList *pSeq)
{
int i, j, k; //设K为最小数的下标
for(i = 0; i < pSeq->size; i++)
{
DataType temp;
k = i;
for(j = i+1; j < pSeq->size; j++)
{
if(pSeq->array[j] < pSeq->array[k])
{
k = j;
}
}
temp = pSeq->array[i];
pSeq->array[i] = pSeq->array[k];
pSeq->array[k] = temp;
}
} //二分查找
int BinarySearch(SeqList *pSeq,DataType x)
{
int left = 0;
int right = pSeq->size; while(left < right)
{
int mid = left + (right - left)/2;
if(pSeq->array[mid] < x)
{
left = mid+1;
}
else if(pSeq->array[mid] > x)
{
right = mid;
}
else
{
return mid;
}
}
return -1;
}
//递归 二分查找
int BinarySearch_r(SeqList *pSeq,int left,int right,DataType x)
{
SeqList List;
assert(pSeq);
while(left < right)
{
int mid = left + (right - left)/2;
if(pSeq->array[mid] < x)
{
return BinarySearch_r(&List,mid+1,right,x);
}
else if(pSeq->array[mid] > x)
{
return BinarySearch_r(&List,left,mid,x);
}
else
{
return mid;
}
}
return -1;
}
C简单实现动态顺序表的更多相关文章
- 数据结构C语言版--动态顺序表的基本功能实现(二)
/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用 ...
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
一.基本概念: 线性表:由n个类型相同的数据元素组成的有限序列,记为(a1,a2,--an). 线性表的特征:其中的元素存在这序偶关系,元素之间存在着严格的次序关系. 顺序存储表:线性表中的元素依次存 ...
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
- C++实现动态顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...
- 动态顺序表(C++实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...
- 数据结构之动态顺序表(C实现)
线性表有2种,分为顺序表和链表. 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) 链表: 有3种,单链表.双向链表.循环链表(长度不固定) seqList.h ...
- 利用SpEL 表达式实现简单的动态分表查询
这里的动态分表查询并不是动态构造sql语句,而是利用SpEL操作同一结构的不同张表. 也可以参考Spring Data Jpa中的章节http://docs.spring.io/spring-data ...
- C语言实现的顺序表
顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...
- 3、顺序表、内存、类型、python中的list
1.内存.类型本质.连续存储 1.内存本质 2.C 语言实例-计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 ...
随机推荐
- 【BZOJ1717】产奶的模式(后缀数组)
[BZOJ1717]产奶的模式(后缀数组) 题面 权限题 hihocoder 洛谷 题解 \(hihocoder\)里面讲的非常好了 这题要求的就是最长可重叠重复K次子串 所谓相同的子串 我们可以理解 ...
- TP5 路由使用
这里可以直接从第四条开始看 原文http://www.upwqy.com/details/12.html 1 文档链接 tp5路由官方文档 https://www.kancloud.cn/manua ...
- JavaScript 再谈闭包
之前有整理过一版关于闭包的概念,但感觉思路不是很清晰,是临时想起一些例子来讲的,今天再次来讲一下闭包. 闭包: 函数嵌套函数,内部函数可以引用外部函数的参数和变量 function aaa(a){ v ...
- [Linux][Madplay播放器移植mini2440(ARM9)]
Madplay移植到mini2440全过程详解 madplay交叉编译 交叉编译器:arm-linux-gcc 3.4.1PC环境:RedHat-6 注意:最好在root权限下执行以下移植,否则在ma ...
- C# Redis实战(二)
二.Redis服务 在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图 可以 ...
- Jexus 5.8.3正式发布:Asp.Net Core在Linux上最友好服务器平台
Jexus Web Serever 是一款运行于 Linux 操作系统,以支持 ASP.NET.ASP.NET CORE.PHP 为特色的高性能 WEB 服务器和反向代理服务器.最新版 5.8.3 已 ...
- kill 掉所有正在运行的hadoop jobs
# get list of job's process IDs JOB_LIST=$(hadoop job -list 2> /dev/null | grep job_ | awk '{prin ...
- CPU平均负载 load average
平均负载是指上一分钟同时处于就绪状态的平均进程数.在CPU中可以理解为CPU可以并行处理的任务数量,就是CPU个数X核数.如果CPU Load等于CPU个数乘以核数,那么就说CPU正好满负载,再多一点 ...
- MySQL常用的查询命令
MySQL常用的查询命令 author: headsen chen 2017-10-19 10:15:25 个人原创.转载请注明作者,出处,否则依法追究法律责任 1,查询现在的时间:mysql& ...
- elasticsearch基本操作之--java基本操作 api
/** * 系统环境: vm12 下的centos 7.2 * 当前安装版本: elasticsearch-2.4.0.tar.gz */ 默认进行了elasticsearch安装和ik安装, 超时配 ...