顺序表逻辑与程序实现
顺序表
思路:按下标寻找表中的数据
#define SIZE 5 //方便修改数组的大小
顺结构体可定义为:
typedef struct
{
int *p; //用于保存堆空间开出来的地址
int sign; //有效数据的下标
int size; //数组元素的总个数
}seq_t;
顺序表的初始化
void seq_init(seq_t * ps)
{
ps->size=SIZE;
ps->p=(int *)malloc(ps->size * sizof(int));
if(ps->p=NULL)
{
perror("空间申请失败!!\n");
return;
}
ps->sign=-1; //刚刚申请的空间,里面没有输入数据令其为-1,表示空间里没有数据
}
添加数据
void seq_add(int data,seq_t* ps)
{
int *temp; //用于接受当空间不足时重新扩容的地址
if(ps->sign==ps->size-1)
{
//扩容
ps->size += SIZE ;
temp=(int *)realloc(ps->p,ps->size * sizeof(int));
ps->p=temp; //这里通过temp转存堆空间的地址,而不是直接用ps->p接受,
//一方面是逻辑上便于理解,
//另一方面是ps->p即作为relloc函数内的实参
//又作为realloc函数的返回地址,这可能发生混淆
printf("空间重定义,扩容成功!!\n")
}
ps->sign++;//使得下标移动
ps->p[ps->sign]=data;//将数据存放进p指向的堆空间,ps->sign作下标
}
//删除
//添加完数据源后,思考如何才能进行删除操作?
//我们想删除一个数据,要先找到这个数据的位置,然后把其后面的数据往前移
//由于每次我们加人一个元素都会使得ps->sign++,因此实际上ps->sign的值其实是该数组的有效数据个数,也是该数组的长度
void seq_del(seq_t *sp,data)
{
if(ps->sign==-1)
{
printf("数组为空\n");
return;
}
int i,j;
for(i=0;i<=ps->sign,i++) //遍历
{
if(ps->p[i]==data) //找到了要删除的数据
{
for(j=i;j<ps->sign;j++) //尾元素下标 - 被删除的元素下标 得到要移动的元素个数
{
ps->p[j]=ps->p[j+1]; //自被删除的元素处,后面的元素往前移动一格
}
ps->sign--;//自减使得有效数据减少一个,即表示该数组长度减少一格
return;
}
printf("没有该元素\n");\\遍历完了一遍都没进if说明没找到
}
//修改数据
//改谁? 改成什么?
//找到数据 替换数据 操作与删除类似
void seq_del(seq_t *sp,data,int new ,int old)
{
int i;
for(i=0;i<=ps->sign,i++) //遍历
{
if(ps->p[i]==old) //找到了要替换的数据
{
ps->p[i]=new;
return;
}
printf("没有该元素\n");\\遍历完了一遍都没进if说明没找到
}
\\遍历
void display(seq_t *sp)
{
for(i=0;i<=ps->sign,i++) //遍历
{
printf("a[%d]=%d",i,ps->sign);
return;
}
printf("\n");
}
顺序表逻辑与程序实现相关推荐
- c语言线性顺序表,C语言程序——线性顺序表.doc
C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...
- 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
[项目2 - 建设"顺序表"算法库] 领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库. 算法库包括两 ...
- 3、线性表的顺序存储结构(顺序表)
线性表的顺序存储结构简称为顺序表.线性表的顺序存储结构是把线性表中的元素中的元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中,它直接将线性表的逻辑结构映射到存储结构上,既 ...
- 第3周实践项目4 -顺序表的应用 删除顺序表中元素为x的值
/* copyright (t) 2017,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:邵雪源 *完成日期:2017年9月14日 *问题描述:删除元 ...
- 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2 -建设"顺序表算法库" *作 者:邵雪源 ...
- 顺序表的建立、查找、插入、删除
顺序表:顺序表是线性表的顺序储存结构 ,顺序表就是将线性表中的数据元素按照线性顺序存储到指定位置开始的.一块连续的存储空间中. 顺序表c++代码: #include<bits/stdc++.h& ...
- 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换
顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL中的ve ...
- C++实现顺序表两个集合的并交差集
给定两个顺序表(代表两个不同的集合),利用顺序表的基本操作实现这两个集合的并集,交集,差集. 运行结果如下图所示: 顺序表的基本操作我在另外一篇文章有讲,对于顺序表的基本操作在这里我就不详细讲了,主要 ...
- c语言创建空顺序表的程序,用C语言编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。...
#include #include #define maxsize 30 typedef int datatype; typedef struct seqlist{ datatype data[max ...
最新文章
- 6.windows线程切换_主动切换
- mysql中jdbc的metadata_JDBC(九)DatabaseMetaData 数据库元数据
- 我的大大小小的开源代码。
- [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像
- linux 多个会话同时执行命令后history记录不全的解决方案
- java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
- es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...
- 第二十四期:面试问:Kafka为什么速度那么快?该怎么回答
- 当你和天猫精灵对话时,它在想什么?阿里智能对话技术深度解读
- javascript设计模式_JavaScript 设计模式 学习总结
- 框架页面中,从子页面刷新父页面问题解决
- 一个猜拳游戏的算法设计
- 云小课 | MRS和自建Hadoop相比,有哪些优势?
- 接口自动化测试框架实例教程
- 最全整理:中国人工智能百强企业(100)榜单
- java 工作流框架_java工作流是什么?哪些工作流框架比较好?
- 微分几何中映射的二度理解
- 系统集成项目管理工程师知识点总结(错题记录)
- Excel函数SUMIFS和COUNTIFS详解
- Firefox火狐浏览器插件大全