数据结构之顺序表,插入,删除等
来源:互联网 发布:皇家猫粮淘宝假货多吗 编辑:程序博客网 时间:2024/04/28 13:14
大三上半年把较多的精力放在了专业课上,一直也没分配多少时间自己去再关注其他感兴趣的,当你主动去学知识时,它就变的似乎更有趣了,进入正题,这几天开始又学习了数据结构,主要如下:
一数据结构重点研究三方面的内容:
1数据的逻辑结构:指数据元素之间的逻辑关系
它分为两大类 a 线性结构:经典的线性结构是线性表,线性结构中数据元素存在1对1的关系
b非线性结构:经典的非线性结构是树形结构和图形结构,树形结构中的元素间存在1对多的层次结构,图形结构中的元素间存在着多对多的网状结构
2数据的存储结构:是指数据的逻辑结构到计算机存储器的映射,
常用的实现数据存储的结构的方法有如下几种
A顺序存储
其基本思想是:把逻辑上相邻的数据元素存储在物理位置上相邻的存储单元里,数据元素间的逻辑关系由存储单元的邻接关系来体现
B链式存储:其基本思想是:通过附加指针域来表示数据元素之间的关系,这种存储方式不要求逻辑上相邻的数据元素存储在位置上也相邻,数据元素间的逻辑关系是通过附加指示其他数据元素位置的地址信息(指针)而得到的
C索引存储:
其基本思想是:除了存储数据元素,还要建立一个或若干个附加的索引表来标识数据元素的地址,索引表中的每一项称为索引项,是用来标识一个或一组数据元素的存储位置
D散列存储
其基本思想是:根据数据元素的关键字直接计算出该结点的存储地址,通常称为关键字-地址转换法
3数据的运算:是指对数据元素进行加工和处理
二 算法和程序的区别及相通之处
(1)算法时解决特定问题的方法和步骤,是有若干条指令组成的有序序列
算法需要满足有穷性,对于任何一组合法输入值,算法必须是在执行有穷步骤后结束,有限时间完成,但程序可以不满足有穷性的要求
(2)程序中的指令必须是机器可执行的,但算法中的指令没有这个限制
相通之处:
一个算法若用机器可识别的语言来写就是一个程序
三 对算法的定量评价
(1)时间复杂度,也就是一个算法运行时所耗费的系统时间,即一个算法的时间效率(算法的时间复杂度是由嵌套循环中最内层的循环语句的频度决定的)
(2)空间复杂度,也就是算法运行时消耗的存储空间,即算法的空间效率
注意,一般来说,两者不可兼得,要节约算法的执行时间往往要以牺牲存储空间为代价
而为了节省存储空间就要付出更多的系统时间
四 线性表是最基本最常用的一种数据结构,什么是线性表呢
线性表(Linear List)是据有相同属性的n(n>=0)个数据元素的有序序列,数据元素的个数n为线性表的长度,当n=0时称为空表,即表中不含有任何元素,通常将非空的线性表(n>=0)记为:
L=(a1,a2,a3,······,ai-1,ai,ai+1,······an)
线性表的逻辑特征和线性结构的逻辑特征一样:有且仅有一个开始结点和一个终端结点,其余的内部结点都有且仅有一个前趋和一个后继
五 线性表用顺序方式存储就称为顺序表,线性表用链式方式存储就称为链表
六 顺序表存储结构用C语言描述如下:
#define MAXSIZE 1024
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE];
int last;// 一般,线性表的实际元素个数应该小于等于MAXSIZE,因此需要一个变量来记录当前线性表中最后一个元素在数组中的下标,用 last变量
}SeqList;
SeqList SL;
七 线性表的插入运算
线性表的插入是指在表L的第i(1<=i<=n+1)个位置插入一个值为x的新元素,插入后使原长度为n的表
(a1,a2,a3,······,ai-1,ai,ai+1,······an)
成为长度为n+1的表
(a1,a2,a3,······,ai-1,x,ai,ai+1,······an)
其思想是:
一般情况下,在第i(1<=i<=n)个位置插入元素,需要从第n个元素起至第i个元素依次向后移动一个位置到n+1,n,·····,i+1上,然后再把新元素x插入到第i个位置上
在编写实现算法的C函数前,应先分析一下该算法中的主要步骤
步骤1 :由于是插入运算,首先要检查是否有插入位置,即顺序表是否已满,若顺序表已满,则产生溢出错误,返回插入失败
步骤2:在有插入位置的前提下,还要检查插入位置是否合适,即是否满足1<=i<=n+1,若不满足条件,则插入位置错误,返回插入失败
步骤3:在步骤1,2都顺利通过的前提下,实现后移操作
步骤4:插入新结点
步骤5:将表长加1,返回插入成功
插入算法的c函数如下:
Int insertElem(SeqList *L,int i, DataType x)
{
Int j;
If(L->last==MAXSIZE-1)
{
Printf(“overflow”);
Return 0;
}
If((i<1)||(i>L->last+2))
{
Printf(“error”);
Return 0;
}
For(j=L->last;j>=i-1;j--)
L->data[i+1]=L->data[j];
L->data[i-1]=x;
L->last++;
Return 1;
}
注意:插入位置的有效范围是1<=i<=n+1,但当n+1<i<MAXSIZE时,在顺序表中有预留的存储单元,是否可以有插入操作?回答是;不可以,因为没有保证元素之间的逻辑关系
八 线性表的删除
是指从线性表中删除中删除第i(1<=i<=n)个元素,删除后使原表长度减一
其思想是:
一般情况下,若删除第i(1<=i<=n-1)个元素,需要将第i+1至第n个元素依次向前移动一
删除算法的c函数如下
Int deleteElem(SeqList *L,int i)
{
Int j;
If(i<1||i>L->last+1)
{
Printf(“第%d个元素不存在”,i);
Return 0;
}
For(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
Return 1;//表示删除成功
}
九 线性表的按值查找
是指在线性表中查找与给定的x相等的数据元素,
其思想是:
从第一个元素和x比较,如果找到一个与x相等的元素,则返回它在线性表中的序号,表示查找成功,如果查遍整个表都没有找到和x相等的元素,返回0,表示查找失败
对应的c语言函数如下:
Int LocatElem(SeqList *L,DataType x)
{
Int i;
For(i=0;i<=L->last;i++)
If(L->data[i]==x)
Return i+1;//返回的是序号
Return 0;
}
- 数据结构之顺序表,插入,删除等
- 数据结构之线性表的顺序结构操作2-(删除,插入,查值等)
- 数据结构之顺序表的创建、插入、删除、定位
- 【数据结构】采用数组的形式实现顺序表的建立、插入、删除等操作
- 数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
- 数据结构之线性表的顺序存储结构(数组)的插入与删除
- 数据结构学习之路----------线性表顺序存储结构插入和删除节点平均移动次数
- 数据结构(c语言版)顺序表的建立、初始化、插入、删除、遍历等12个基本操作及测试
- 数据结构之单向链表操作1-(插入,删除,交换,反转,排序等操作)
- 数据结构之循环链表操作3-(合并,拆分,插入,删除,建立等)
- 数据结构之双向循环链表操作4-(插入,删除,建立等)
- 数据结构之顺序表3(顺序表的创建、插入、删除········)
- 顺序链表的插入删除等操作 C语言
- 顺序表的创建、遍历、插入、删除等操作demo
- 【数据结构】顺序线性表的插入、删除、合并实现
- 数据结构-顺序表得实现-删除插入初始化打印
- 数据结构-顺序线性表的初始化,插入,删除
- C语言之数据结构的顺序单链表创建,插入和删除操作
- 基于stm32f103zet6的定时器的学习2(定时器上溢)
- 【linux问答】ubuntu root密码,SSH服务安装等常用操作
- 开始使用CSDN
- C语言中__DATE__,__TIME__,__FILE__和__LINE__的用途
- linux学习入门20——RPM软件包管理(linuxcast.net)(rpm 安装,验证等)
- 数据结构之顺序表,插入,删除等
- 我的电脑怎么了?图标都带影的、
- 匿名委托
- linux学习入门21——YUM软件管理(linuxcast.net)
- uva 1267 Network
- poj2706 connect
- virtualbox
- 程序员度量:改善软件团队的分析学
- 小说下载阅读器_初始简单版