数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
数据,也就是符号,必须具备两个前提:
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);
}