数据结构与算法----线性顺序表

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
数据,也就是符号,必须具备两个前提:
a.可以输入到计算机中
b.能被计算机程序处理
对于整型、实型等数值类型,可以进行数值计算。
对于字符数据类型,就需要非数值的处理。而声音、图像、视频等其实是可以通过编码的手段变成字符数据来处理的

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
比如 畜类 牛、马、羊、鸡、猪、狗等动物当然就是畜类的数据元素。

数据项:一个数据元素可以由若干个数据项组成。
比如人这样的元素,可以有眼、耳、鼻、嘴等数据项,也可以有姓名、年龄、性别等数据项。
数据项是数据不可分割的最小单位。

数据对象**:是性质相同的数据元素的集合,是数据的子集。
什么叫性质相同呢?是指数据元素具有相同数量和类型的数据项,比如人 这个例子,都有姓名、生日、性别等相同的数据项。
既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆的情况下,我们将数据对象简称为数据。
 

顺序存储∶把线性表的结点按逻辑顺序依次存放在—组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。


顺序存储的线性表的特点
线性表的逻辑顺序与物理顺序一致;
数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。


设有非空的线性表:(a1, a2,.….an)。顺序存储如图

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100  //线性表初始存储空间大小
#define LISTINCREMENT 10    //新增存储空间大小
typedef int ElemType;
typedef int Status;

typedef struct {
	ElemType *elem; //存储空间基地址
	int length; //存储长度
	int listsize; //当前存储容量
}SqList;




//初始化
Status InitList_Sq(SqList &L) {
	L.elem = (ElemType*)malloc((LIST_INIT_SIZE) * sizeof(ElemType)); //分配初始存储空间
	if (!L.elem) return ERROR;
	else
	{
		L.length = 0; return OK;
	}
	L.length = 0;   //空表长度为0
	L.listsize = LIST_INIT_SIZE;  //设置初始容量
	return OK;
}



//插入元素(在第i-1个元素和i的元素之间插入值)

Status ListInsert_Sq(SqList &L,int i,ElemType e){
    ElemType *newbase, *p, *q;
    if(i < 1||i > L.length + 1) return ERROR;  //判断删除位置是否正确
    if(L.length >= L.listsize){
        newbase = (ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)* sizeof (ElemType)); //存储空间不足,申请增加空间
        L.elem = newbase;  //新基地址
        L.listsize += LISTINCREMENT; //容量增加
    }
    p = &L.elem[i-1];
    for(q = &L.elem[L.length-1];q >= p; q--){  
            *(q+1) = *q;        //插入位置之后的元素后移
    }
    *p = e;  //插入e
    L.length++; //表长+1
    return OK;
}



//删除元素

Status ListDelete_Sq(SqList &L,int i,ElemType e)
{
    if(i < 1 || i > L.length)
        return ERROR;
    ElemType *p,*q;
    p = &L.elem[i-1];  //获取删除位置的地址
    e = *p;   //获取地址对应值
    p++;   //把地址往后移
    q = &L.elem[L.length-1];  //获取表尾地址
    for(p ;p <= q; ++p)
        *(p-1) = *p;   //被删除元素后的元素往前移
    L.length--;  //表长-1
    return OK;
}


int main()
{
	SqList L;
	InitList_Sq(L);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值