数据结构(一)

一些基本概念和术语:

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合
数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录
数据项:一个护具元素可以有若干个数据项组成,是数据不可分割的最小单位
数据对象:是性质相同的数据元素的集合,是数据的子集
数据结构:是相互之间存在一种或多种或多种特定关系的数据元素的集合。
逻辑结构:是指数据对象中数据元素之间的相互关系。
有以下四种关系: ①集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有任何关系
     ②线性结构:线性结构中的数据元素之间是一对一的关系
     ③树形结构:树形结构中的数据元素之间存在一种一对多的层次关系
     ④图形结构:图形结构中的数据元素是多对多的关系
物理结构:是指数据的逻辑结构在计算机中的存储形式,分别是顺序存储和链式存储
顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续 的


线性表:(元素有a1-an)

1.线性表的定义:零个或多个数据元素的有限队列
除了第一个数据元素没有前驱和末尾元素没有后继外,其他元素都有一个前驱和一个后继。
2.线性表的顺序存储结构
指的是用一段地址连续的存储单元一次存储线性表的数据元素。示意图如下:
顺序存储的结构代码:
#define MAXSIZE 20    /*存储空间初始分配量*/
typedef int ElemType;   /*数据类型视情况而定*/
typedef struct
{
    ElemType data[MAXSIZE];  /*数组存储数据元素*/
    int length;  /*线性表当前长度*/
}SqList;

顺序存储结构的插入与删除:

获得元素:
/*初始条件:顺序线性表L已存在,
  操作结果:返回值e表示L中第i个数据元素的值*/
#define error 0;
#define success 1;
int GetElem(SqList L, int i, ElemType *e)
{
    if(L.length == 0 || i < 1 || i > length)
    {
	return error;
    }
    *e = L.data[i - 1];
    return success;
}

插入操作:

插入算法的思路:
插入位置不合理,抛出异常;
若线性表长度大于等于数组长度,则抛出异常或动态增加容量;
插入元素填入i处,i处后面的每个元素后移一位;
表长+1

代码举例:
int ListInsert(SqList *L,int i,ElemType e)
{
    int k;
    if(L->length == MAXSIZE)
    {
	return error;
    }
    if(i < 1 || i > L->length + 1)
    {
	return error;
    }
    if(i <= L->length)  /*插入元素不在表尾*/
    {
	for(k = L->length - 1; k >= i - 1; k--)
	{
	    L->data[k + 1] = L->data[k];
	    L->data[k + 1] = L->data[k];
	}
	L->data[i - 1] = e;  /*插入新元素*/
	L->length++;
	return success;
    }
}


删除操作:

删除操作思路:
删除位置不合理,抛出异常;
取出删除元素;
从删除位置开始遍历到最后一个元素,分别将他们向前移动一个位置;
表长-1

代码举例:
int ListDelete(SqList *L,int i,ElemType e)
{
    int k;
    if(L->length == 0)  /*线性表为空*/
    {
        return error;
    }
    if(i < 1 || i > L->length)  /*删除位置不正确*/
    {
	return error;
    }
    *e = L->data[i - 1];
    if(i < L->length)     /*如果删除不是最后1个位置*/
    {
	for(k = i; k < L->length; k++)  /*将删除位置后继元素前移*/
	{
	    L->data[k - 1] = L->data[k];
	}
    }
    L->length--;
    return success;
}
线性表顺序存储结构的优缺点:
优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间
     2.可以快速的存取表中任意位置的元素
缺点:1.插入和删除操作需要移动大量元素
     2.当线性表长度变化较大时,难以确定存储空间的容量
     3.造成存储空间的“碎片”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值