c语言将外部文件student.txt导入顺序表,利用C语言实现顺序表的实例操作.pdf

本文详细介绍了如何在C语言中实现顺序表(线性表)的数据结构,包括初始化、插入元素等操作。通过定义结构体来存储顺序表的相关信息,并使用realloc动态扩展内存以应对表满情况。代码中还包含了判断顺序表是否为空和是否已满的宏定义。
摘要由CSDN通过智能技术生成

利利用用C语语言言实实现现顺顺序序表表的的实实例例操操作作

本文实例讲述了C语言实现顺序表(线性表)的方法。分享给大家供大家参考 具体如下:

一一::顺顺序序表表代代码码实实现现

#ifndef _SEQ_LIST_H

#define _SEQ_LIST_H

#include

#include

#include

#include

#define ElemTy e float //以float类型测试算法通用性 而不是以惯用的int

#define INIT_SIZE 10 //顺序表默认初始化大小

#define LIST_INCREMENT 5 //顺序表容量增量 容量不够使用malloc申请

#define list_full(list) ((list)->size >= (list)->ca acity ? 1 : 0) //顺序表判满

#define list_em ty(list) ((list)->size == 0 ? 1 : 0) //判空

ty edef ElemTy e value_ty e; //元素类型

ty edef value_ty e* value_ tr; //元素指针类型

ty edef enum {false, true}bool; //为C语言增加bool量

ty edef enum {POSITION, VALUE}DELETE_MODE; //删除元素模式选择 分别为按位置删除和按值删除

ty edef struct sequelize_list{

ElemTy e *base; //顺序表基址

int size; //顺序表元素大小

int ca acity; //顺序表容量

} seq_list, *list_ tr;

void init_list(list_ tr l ) //初始化

{

assert(l != NULL);

l ->base = (value_ tr)malloc(sizeof(value_ty e)*INIT_SIZE); //free

assert(l ->base != NULL);

memset(l ->base, 0, sizeof(value_ty e)*INIT_SIZE);

l ->size = 0;

l ->ca acity = INIT_SIZE;

}

bool insert_elem(list_ tr l , const int os, const value_ty e elem) //插入元素

{

assert(l != NULL && os >= 1 && os <= l ->size+1);

if(list_full(l )){ //如果表满 追加申请空间

value_ tr new_base = (value_ tr)realloc(l ->base,

sizeof(value_ty e)*(l ->ca acity+LIST_INCREMENT));//此处注意realloc用法 用新地址接收是为

了防止realloc失败 原地址有效内容被释放

assert(new_base != NULL); //并且realloc填写的申请空间大小必须是之前的大小+增量的大小 而不是

只写增量 否则如果原地址内存不够 在新地址申请增量大小的空间 将之前的内容挪至新空间 内存溢出 将

发生段错误

l ->base = new_base; //再赋回给原地址

l ->base[l ->ca acity] = elem;

l ->ca acity += LIST_INCREMENT;

++l ->size;

}

else{ //未满 插入元素

for(int i=l ->size-1; i>= os-1; --i){ //将元素后移 腾出位置

l ->base[i+1] = l ->base[i];

}

l ->base

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值