数据结构-线性表的顺序表示
- 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或者顺序映像。
代码解析
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct //顺序表的结构类型
{
ElemType *data; //存储空间的基地址(存储数据)
int length; //当前长度
}LineArray;
void initList(LineArray *lineArray); //初始化顺序表
int LocateElem(LineArray *lineArray,ElemType type); //循序表查找
int ListInsert(LineArray *lineArray,int position,ElemType e);//顺序表增加
int ListDelete(LineArray *linearray,int position);//顺序表删除
void printList(LineArray *LineArray); //顺序表遍历
void initList(LineArray *lineArray){
lineArray=malloc(1);
lineArray->data=malloc(MAXSIZE);
lineArray->length=0;
if(!lineArray->data)
{
printf("实例化失败");
return;
}
else
{
printf("实例化完成");
}
};
int LocateElem(LineArray *lineArray,ElemType type){
for (size_t i = 0; i < lineArray->length; i++)
{
/* code */
if(lineArray->data==type) //依次和e作比较 相等返回指标+1(即为位置)
{
return i+1;
}
}
int ListInsert(LineArray *lineArray, int position, ElemType e)
{
if (position <= 0 ||( position > lineArray->length + 1))
{
printf("插入位置不合适");
return 0;
} //插入位置不合适 返回0;
if (lineArray->length == MAXSIZE)
{
printf("顺序表已满");
return 0;
}
for (int i = lineArray->length-1; i > position - 1; i--)
{
/* code */
lineArray->data[i+1] = lineArray->data[i];
}//从后往前,依次往后移一位。直到移到position 为止
lineArray->data[position-1] = e; //移动完成后将position 的数据替换为需要插入的数据e
++lineArray->length;
printf("添加完成");
return 1;
};
int ListDelete(LineArray *lineArray,int position){
if(position<1||( position > lineArray->length ))
return 0;
for(int j=position;j<lineArray->length-1;j++)
{
lineArray->data[j-1]=lineArray->data[j];
}
--lineArray->length;
return 1;
};
void printList(LineArray *L)
{
printf("遍历结果如下\n");
for (int i = 0; i < L->length; i++)
{
/* code */
printf("%d\t", L->data[i]);
}
};
顺序表的存储方式
-
顺序存储:存储单元地址连续,它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
-
链式存储:存储单元地址为任意一组,它的存储单元可以是连续的,也可以是不连续的。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分信息组成数据元素的存储映像,称为结点(node)。