1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言实现顺序存储程序 线性表的顺序存储结构动态态分配C语言实现

c语言实现顺序存储程序 线性表的顺序存储结构动态态分配C语言实现

时间:2023-08-20 17:56:50

相关推荐

c语言实现顺序存储程序 线性表的顺序存储结构动态态分配C语言实现

线性表的顺序存储结构动态态分配C语言实现

线性表的顺序存储结构动态态分配C语言实现

初始化执行期间通过malloc函数为数组申请空间,程序运行期间若空间不够可通过realloc函数在保留原存储值的前提下为数组申请更大的连续存储的空间。

源代码如下:

#include

#include

#define initSize 1000

#define incSize 500//增大顺序表存储空间时每次的增长值

#define OVERFLOW 9999

#define ERROR -1

#define EMPTY -2

typedef int eleType;

typedef struct{

eleType *Delem;

int length;

}DList;

// 函数申明

void initList(DList *L);

void insertList(DList *L,int i,eleType e);

int listLength(DList L);

int getElem1(DList L,int i);

void getElem2(DList L,int i,eleType *e);

int locateElem(DList L,int e);

void listDelete(DList *L,int i,eleType *e);

void printList(DList L);

int emptyList(DList L);

void destroyList(DList *L);

int main(){

DList L;

initList(&L);

int e;

int i;

int o;

for(i=1;i<5;i++){

insertList(&L,i,i);

}

printList(L);

printf("Hello!\n");

int m = listLength(L);

printf("顺序表的长度:\t%d\n",m);

insertList(&L,2,22);

printList(L);

printf("第二个元素:%d\t\n",getElem1(L,1));

getElem2(L,2,&e);

printf("第三个元素:%d\t\n",e);

printf("元素4的index=%d\n",locateElem(L,4));

listDelete(&L,3,&o);

printf("删除的元素值:%d\n",o);

printList(L);

printf("%d\n",emptyList(L));

destroyList(&L);

return 0;

}

// 初始化链表

void initList(DList *L){

L->Delem = (eleType *)malloc(initSize *sizeof(eleType));

if(!L->Delem)

exit(OVERFLOW);

L->length = 0;

return;

}

void insertList(DList *L,int i,eleType e){

if(L->length == initSize){

eleType *p;

p = (eleType *)realloc(L->Delem,(initSize + incSize)*sizeof(eleType));

if(!p){// 未分配成功

exit(OVERFLOW);

}

L->Delem = p;// L->Delem 指向新申请的存储空间

L->length += incSize; //表长修改为新的存储空间可存放数据元素个数

}

//if(i<1 || i>L->length)

//exit(ERROR);

int j;

for(j=L->length-1;j>=i-1;j--)

L->Delem[j+1] = L->Delem[j];//从表尾开始插入位置,数据元素依次后移动一个位置

L->Delem[i-1] = e;

L->length++;

return;

}

// 求线性表的长度

int listLength(DList L){

return L.length;

}

// 获取线性表的第i个元素

int getElem1(DList L,int i){

if(i<0 || i>L.length)

exit(ERROR);

return L.Delem[i];

}

// 获取线性表的第i个元素

void getElem2(DList L,int i,eleType *e){

if(i<0 || i>L.length)

exit(ERROR);

*e = L.Delem[i];

return;

}

// 确定元素e是线性表中的第几个元素

int locateElem(DList L,int e){

int i;

for(i=0;i

if(L.Delem[i]==e)

break;

if(i!=L.length)

return i;

else

return 0;

}

//删除线性表中的第i个元素,将其放在变量e中

void listDelete(DList *L,int i,eleType *e){

if(L->length==0){

exit(EMPTY);

}

if(i<1 || i>L->length)

exit(ERROR);

*e = L->Delem[i-1];// 线性表中的第i个元素存放于变量e中

int j;

for(j=i-1; jlength-1; j++)

{//从第i个数据元素开始,依次将后面的元素前移一个位置

L->Delem[j] = L->Delem[j+1];

}

L->length--;

return;

}

//遍历线性表

void printList(DList L){

int i;

for( i=0;i

printf("%d\t",L.Delem[i]);

}

printf("\n");

}

//判断线性表为空,前提条件是线性表存在

int emptyList(DList L){

if(L.length > 0) return 1;

return 0;

}

//销毁线性表

void destroyList(DList *L){

if(!L->Delem)//没有可销毁的内容

exit(ERROR);

free(L->Delem);

L->length =0;

}

按照我们期望的运行结果

值得思考的是在insertList(DList *L,int i,eleType e)函数中有个完备性检查未能实现:

if(i<1 || i>L->length)

exit(ERROR);

通过静态分配和动态分配对比可知,共同点都是使用数组构造,逻辑基本相同,不同的就是,动态分配在原数组满了的情况下可以扩充,而静态的是数组存满就不能扩充了。大家可以思考两种分配方式中所用到的空间复杂度和时间复杂度。

线性表的顺序存储结构动态态分配C语言实现相关教程

一天一个机器学习小知识——线性回归

一天一个机器学习小知识——线性回归 文章目录 前言 一、算法推导 1.模型 2.策略 3.算法 二、应用场景 三、代码实现 1.导入相关库 2.读取样例数据 3.划分训练集和测试集 4.建立模型 5.评估模型 四、优缺点 1.优点 2.缺点 前言 本栏目主要介绍机器学习中的算法

flask使用七牛云存储图片并展示

flask使用七牛云存储图片并展示 注册七牛云,实名认证,点击对象存储,创建公开空间 找到python SDK,在项目下创建一个util.py文件,粘贴下去 util.py修改如下 from qiniu import Auth, put_file, etag, put_dataimport qiniu.configimport randomimport datet

数据结构(C语言版)——3.1、顺序栈实现

数据结构(C语言版)——3.1、顺序栈实现 3.1.1、顺序栈说明 和顺序表(线性表的顺序存储结构)类似。顺序栈即栈的顺序存储结构是利用一组地址连续的存储单元依次存放 自栈底 到栈顶 的数据元素,同时附设指针 toptoptop 指示栈顶元素在顺序栈中的位置。 通常

Java:String的不可变性理解以及存储问题

Java:String的不可变性理解以及存储问题 首先什么是String,其名为字符串(在c里没有,c++有),注意String不是基本数据类型,是引用类型(类),也就是说String str储存的是地址值,但当我们打印一个String时返回的却是一个字符串,这是因为打印时默认调用st

线性表的链式存储(业务结点和链表算法分离模式)

线性表的链式存储(业务结点和链表算法分离模式) 原有的链表结构体里添加了数据域,导致业务结点和算法逻辑耦合,虽然可以用typedef定义不同的数据类型,但是还是不太方便。参考了传智扫地僧相关源码 LinkListApi.h如下: //直接给返回一个句柄,内部有一个

ceph存储接口-S3API和rados

ceph存储接口-S3API和rados ceph常用的接口有librados和s3api,s3api与ceph对象网关RGW连接,往ceph集群存储数据,librados是对象网关RGW的下层,运行效率更高,性能更好。 使用librados可以操作ceph集群,它提供了存储,读取,删除,列出所有对象等功能。 在

数据在内存中的存储

数据在内存中的存储 一、数据类型可分为: ①内置类型 ②自定义类型 (1)常见的内置类型: char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度整形 (2)自定义类型: 数组类型 结

深度学习之 LinearRegression(多元线性回归)

深度学习之 LinearRegression(多元线性回归) 深度学习之 LinearRegression(多元线性回归) 1、多线线性回归的实现 ? 跟简单线性回归一样都是y-x的映射关系,多元线性回归只是x是多个样本,简单线性回归就是y(预测) = ax(i) +b,而多元线性回归则是如下图。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。