c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除

今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h   .h文件是头文件 需要引入 具体的功能我都已经在代码中写明了

list.h代码如下:

//线性表的定义在头文件中实现

#ifndef _LIST_H

#define _LIST_H

#define _LIST_INIT_SIZE 10

#define _LIST_INCREME 10

typedef struct

{

ElemType * elem;//首地址

int length;

int size;

}LIST;

LIST *InitList();

void FreeList(LIST *l);

int InsertList(LIST *l,int i,ElemType *e);

int DeleteList(LIST *l,int i);

#endif

list.c代码如下

#include

#include

#include "stu.h"

#include "list.h"

//线性表的初始化,此时数据存储的大小的内存还未开辟 开辟的是list.h的大小

LIST *InitList()

{

LIST *l=(LIST *)malloc(sizeof(LIST));

//判断开辟是否成功

if(l==NULL)

exit(0);

//开辟存储数据的内存的区域

l->elem=(ElemType *)malloc(_LIST_INIT_SIZE *sizeof(ElemType));

//如果开辟成功的话就释放掉内存

if(l->elem==NULL)

{

free(l);

exit(0);

}

//有效长度赋初值为0

l->length=0;

l->size=_LIST_INIT_SIZE;

return l;

}

//释放对区内存的函数

void FreeList(LIST *l)

{

//要先释放成员的空间

free(l->elem);

free(l);

}

//第一个参数要传得是插入哪一个线性表中去 i指位置

int InsertList(LIST *l,int i,ElemType *e)

{

//定义一些指针 指向相应的位置

ElemType *p=NULL,*q=NULL,*newElem=NULL;

if(l==NULL || e==NULL)

return 0;

//i指的是第几个位置 不是下标

if(i<1||i>l->length+1)

return 0;

//if有效长度大于最大的长度的时候 重新开辟一块内存

if(l->length>=l->size)

{

newElem=realloc(l->elem,(l->size+_LIST_INCREME)*sizeof(ElemType));

if(newElem==NULL)

return 0;

l->elem=newElem;

l->size+=_LIST_INCREME;

}

//q指向插入的位置 i-1代表下标

q=&l->elem[i-1];

//指向最后一个有效的数据元素

for(p=&(l->elem[l->length-1]);p>=q;p--)

*(p+1)=*p;

*q=*e;

++l->length;

return 1;

}

int DeleteList(LIST *l,int i)

{

ElemType *p=NULL,*q=NULL;

if(l=NULL)

return 0;

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

return 0;

p=&l->elem[i-1];

q=&l->elem[l->length-1];

for(;p

*p=*(p+1);

--l->length;

return 1;

}

stu.h代码如下

#ifndef _STU_H

#define _STU_H

//定义一个学生的结构体

typedef struct

{

char sno[4];

char name[21];

char sex[3];

int score;

}ElemType;

#endif

main.c代码如下

#include

#include "stu.h"

#include "list.h"

ElemType stu[3]={

{"S101","张三","男",80},

{"S102","小红","女",75},

{"S103","王五","男",90},

};

void main()

{

int i;

LIST *list=NULL;

//通过函数初始化空间

list=InitList();

for(i=0;i<3;i++)

InsertList(list,1,&stu[i]);

DeleteList(list,2);

FreeList(list);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存使用分析工具Valgrind简单用法

转载自 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html 暂时还未使用过&#xff0c;记录下&#xff0c;记录下&#xff0c;记录下 Valgrind的主要作者Julian Seward刚获得了今年的Google-OReilly开源大奖之一──Best Tool Maker。让我们一起来看一下他的作品…

Lucene概述第一部分:创建索引

介绍 我最近一直在与开源搜索引擎Lucene合作 。 我不是专家&#xff0c;但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4&#xff0c;所以我在总体上很清楚。 Lucene的文档有点让人难以想象&#xff0c;因此我想趁此机会在我脑海…

初识openstack

一、 什么是openstack&#xff1f; OpenStack是一个由NASA&#xff08;美国国家航空航天局&#xff09;和Rackspace合作研发并发起的&#xff0c;以Apache许可证授权的自由软件和开放源代码项目。 二、openstack前世今身 openstack是一个跟Eucalyptus,AWS(Amazon web Service)类…

c语言case多语句的取值,Switch Case语句中多个值匹配同一个代码块的写法

C&num;&plus;JQuery&plus;&period;Ashx&plus;百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的e…

php解决下单、抽奖并发导致的库存负数的问题

我们知道数据库处理sql是一条条处理的&#xff0c;假设购买商品的流程是这样的&#xff1a; sql1:查询商品库存 if(库存数量 > 0) { //生成订单... sql2:库存-1 } 当没有并发时&#xff0c;上面的流程看起来是如此完美&#xff0c;假设同时两个人下单&#xff0c;而…

在Spring中使用JDBCJobStore配置Quartz

我将开始一些有关Quartz Scheduler内部&#xff0c;提示和技巧的系列文章&#xff0c;这是第0章-如何配置持久性作业存储。 在Quartz中&#xff0c;您基本上可以在将作业和触发器存储在内存中以及在关系数据库中进行选择&#xff08; Terracotta是最近添加的混合功能&#xff0…

rlwrap插件,实现sqlplus上下翻页

oracle在Linux下&#xff0c;sqlplus中不能上下翻&#xff0c;最主要我经常打错字&#xff01;嘿嘿 01、下载 RPM &#xff1a;http://rpmfind.net/linux/rpm2html/search.php?queryrlwrap tar.gz:https://fossies.org/linux/privat/rlwrap-0.42.tar.gz/ 百度云&#xff1a;h…

ice库c语言例子,很不多的ICE架构入门学习例子

虽然使用传统的SOCKET编程&#xff0c;我们可以更为清楚程序的性能&#xff0c;能够更直接的操控SOCKET的设置&#xff0c;比如发送超时时间&#xff0c;接受BUFFER的大小&#xff0c;以及进行自己的协议加密。但是由于其调试成本较高&#xff0c;且不易于分布式部署ICE 作为一…

程序员的十个层次,你属于哪一层?(转)

自西方文艺复兴以来&#xff0c;中国在自然科学方面落后西方很多&#xff0c;软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见&#xff0c;有些人认为中国的程序员水平远落后于西方&#xff0c;有些则认为中国的程序员个人能力并不比西方的程序员差&…

操作系统基础篇

程序运行的4个因素 (1).程序设计语言 (2).编译系统 (3).操作系统 (4).指令集结构&#xff08;硬件系统&#xff09; 操作系统的定义&#xff1a;操作系统是掌控计算机上所有事情的软件系统(硬件资源&#xff0c;软件资源) 操作系统对内存&#xff0c;i/o&#xff0c;cpu&#x…

高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx

...快速中值滤波及c语言实现学生姓名&#xff1a; 刘 勇 学 号&#xff1a; 6100410218 专业班级&#xff1a; 数媒101【摘要】本文讨论了用c语言在微机上实现中值滤波及快速算法&#xff0c;在程序设计的过程中充分考虑到程序运行的时间复杂度和空间复杂度的问题&#xff0e;解…

Arquillian 1.0.0.Final正式发布! 准备使用GlassFish和WebLogic! 杀死所有虫子!

红帽公司和JBoss社区今天宣布的1.0.0.Final发布的Arquillian &#xff0c;其屡获殊荣的建在Java虚拟机&#xff08;JVM&#xff09;运行测试平台。 Arquillian大大减少了编写和执行Java中间件集成和功能测试所需的工作。 它甚至使测试工程师能够解决以前认为无法测试或测试成本…

Jquery选择器特殊字符问题

场景&#xff1a; $("#" AAA "")&#xff0c;AAA代表某表单ID 当AAA为普通字符串时&#xff0c;ok&#xff1b; 当AAA含有特殊符号时&#xff08;eg:a.b&#xff09;&#xff0c;获取不到该对象&#xff1b; 原因&#xff1a;特殊符号会进行转义&#xf…

qq五笔linux,QQ五笔 - 五笔小字典 QQ绑定很实用

九、 智能调频、空码检索、词序固定在QQ五笔中还有一些小亮点&#xff0c;比如它可以根据“最近输入”、“输入次数”对候选词排序。同时为了加快检索速度&#xff0c;默认只在常用字库(GB2312)中检索&#xff0c;只有出现空码后才会继续搜索容量更大的GBK字库&#xff0c;很好…

DFS:C 小Y的难题(1)

解题心得&#xff1a; 1、在明确使用DFS之后一定要找到递归函数的出口、方向&#xff0c;以及递归的点&#xff08;在某个情况下开始递归&#xff09;(void 也可以return&#xff0c;但是没有返回值)。递归时也要有递归的方向&#xff0c;最后都能够达到递归的出口。 2、在DF…

使用ActiveMQ支持Spring Integration路由

正如我在上 一篇 文章中所讨论的那样 &#xff0c;Spring Integration&#xff08;SI&#xff09; 是在Spring Framework之上构建的路由框架 &#xff0c;它使您可以使用经过验证的企业集成模式来通过消息传递解决系统集成问题。 配置好SI并执行路由和中介逻辑后&#xff0c;您…

quagga源码分析--路由信息处理zebra-rib

对于各个协议生成的路由信息的处理属于quagga中非常重要的一个功能&#xff0c;如何在内核进行路由增加&#xff0c;更新&#xff0c;删除是一个复杂的过程。 quagga在thread任务调度中加入了一种工作队列&#xff0c;work_queue&#xff0c;与内核的工作队列类似&#xff0c;是…

android 关闭蓝牙打电话功能,Android蓝牙开发【八】hfp接听、挂断电话

继续研究hfp相关功能。蓝牙耳机可以控制手机接听、拒接、挂断电话&#xff0c;拨打电话等功能。本文主要分析下起这些操作的大致流程。在系统应用Bluetooth中com_android_bluetooth.cpp提供了多个回调方法&#xff0c;由hardware、协议栈回调过来。蓝牙耳机的一些控制命令都会发…

android在listview中放入从sdcard读取的bitmap

重写viewbinder public class viewbinder_bookmark implements SimpleAdapter.ViewBinder{Overridepublic boolean setViewValue(View view, Object data, String textRepresentation){if(view instanceof ImageView && data instanceof Bitmap){ImageView imageview(I…

将状态机模式实现为流处理器

在我的上一个博客中&#xff0c;我说我真的以为某些“四人行”&#xff08;GOF&#xff09;模式已经过时了&#xff0c;如果不是过时的话肯定不受欢迎。 特别是我说过StateMachine不是那么有用&#xff0c;因为您通常会想到另一种更简单的方式来执行您正在执行的事情&#xff0…