数据结构实践.线性表_1

线性表基础:

  1. 定义
    线性表:指具有相同特征的一组数据元素的有限序列;其中数据元素之间的逻辑关系为线性结构

    ( a 1 , a 2 , a 3 , . . . a i − 1 , a i , a i + 1 , . . . , a n − 1 , a n ) (a_{1},a_{2},a_{3},...a_{i-1},a_{i},a_{i+1},...,a_{n-1},a_{n}) (a1,a2,a3,...ai1,ai,ai+1,...,an1,an)

    如线性表 a a a 所示:
       a i a_{i} ai 为数据元素,其中 i i i 为元素下标,指示了元素在线性表中的位置;
       a 1 a_{1} a1 为线性表的起始结点, a n a_{n} an 为线性表的终端结点;
       n n n 为线性表表长,当 n = 0 n = 0 n=0 时,线性表 a a a 为空表。

    #线性表中的数据元素允许是简单类型,也允许是复杂类型。
    #同一线性表中的元素必然具有相同的特征。

  2. 线性表的逻辑特征
      * 非空线性表中,只有一个开始结点 a 1 a_{1} a1 (其没有直接前驱,只有一个直接后继 a 2 a_{2} a2);
      * 非空线性表中,只有一个终端结点 a n a_{n} an (其没有直接后继,只有一个直接前驱 a n − 1 a_{n-1} an1);
      * 非空线性表中,其余的内部结点 a i a_{i} ai 均有且只有一个直接前驱 a i − 1 a_{i-1} ai1 和一个直接后继 a i + 1 a_{i+1} ai+1

  3. 线性表的抽象数据类型定义

/*线性表的抽象数据类型定义*/
ADT List{
	数据对象:D = {a_i|a_i 属于 Elements, (i = 1,2,...,n;n>=0)};
	数据关系:S = {<a_i-1,a_i>|a_i-1,a_i 属于 D, (i = 1,2,...,n;n>=0)};
	基本操作:P
		InitList(&L);
		DestoryList(&L);
		ListInsert(&L,i,e);
		ListDelete(&L,i,&e);
		...
}ADT List

以上的基本操作是基于线性表逻辑结构进行的运算(做什么),只关心运算的功能而非具体实现方式;具体的实现细节(怎么做)需要考虑线性表的存储结构
  * 线性表的顺序表示与实现
  * 线性表的链式表示与实现

  1. C/C++操作补充
    *typedef:将原有类型名转换为新类型名,语法如下
/*typedef 语法*/
//将char类型转换为ElemType类型
typedef char ElemType;

//构建Struct类型并转换为Polynomial类型
typedef struct{
	float p;
	int e;
}Polynomial;

  * 数组定义
    a. 数组静态分配(数组形式)

/*数组内存空间的静态分配*/
#define Maxsize 1000

typedef struct{
	ElemType data[Max_size];		//分配内存空间
	int length;					//定义线性表长度
}SqList;
* 在定义线性表时已完成内存空间的分配,故称为静态分配。

    b. 数组动态分配(指针形式)

/*数组空间的动态分配*/
#include <stdlib.h>
#define Max_size 1000

typedef struct{
	ElemType *data;
	int length;
}SqList;

Sqlist L;			//声明线性表L
L.data = (Elemtype*)malloc(sizeof(ElemType)*Max_size);		//通过malloc()函数动态分配内存空间
* malloc(m):开辟m字节长度的连续地址空间并返回这段地址空间的首地址;
* free(p):释放指针p所指向的内存空间,通常与malloc()函数搭配使用;
* sizeof(x):计算变量x所占内存空间的字节数;

  * C++的动态存储分配

   new 类型名T(参数列表)
    功能:申请用于存放T类型对象的内存空间,并依照参数列表赋初值。
    成功:T类型指针,指向新分配的内存;失败:NULL

   delete 指针P
    功能:释放指针P所指向的内存空间,P必须是new操作的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值