本文主要介绍数据结构中顺序表的创建、声明,现正在学习阶段,如有错误请多多指正。
以下为伪代码,不能直接运行。
顺序表的定义以及创建
#define MaxSize N //宏定义,有利于数据的更改
Typedef int ElemType; //给已有的数据类型起别名,int 数据类型的别名ElemType
ElemType Struct
{
ElemType data[MaxSize]; //线性表的存放的数据
int length; //线性表的长度
}Sqlist //类型
//顺序表的创建
/*将数组a中的元素依次存放在表L中,需要用molloc动态的分配内存(Sqlist *)强制类型转换
Sizeof 计算长度*/
void CreatSql(Sqlist *&L,ElemType a[],int n)
{
int i=0 , j=0 ;
L = (Sqlist *) molloc(Sizeof(Sqlist));
while(i<n)//利用while循环对表进行赋值
{
L->data[i] = a[j];
i++;j++;
}
//数据增加结束后,记得更改表的长度
L->length = k;
}
顺序表的存储是将制定的数据按照逻辑关系 存储在一片连续的存储空间中。
顺序表的插入:
利用参数传递进行数据的插入,在数据插入之前需要判断插入的位置以及顺序表申请空间的大小是否满,由于length等于表的大小,所以i是小于length+1的
//判断语句
Insert(Sqlist *&L,int i,int e)
{
if(i>0&&i<L->length+1) //正确的插入范围
}
顺序表中数据的插入是将插入位置及以后的所有数据都后移一位,从最后一位向前开始移动,
然后利用赋值操作插入数据,最后顺序表的长度要+1,数据插入的时间复杂度按照取平均值中间位置为O(n/2) 最差为O(n) 最好为O(1)
Insert(Sqlist *&L,int i,int e)//表名,插入位置,插入数据
{
//首先进行位置的判断
if(i<1||i>L->length+1)// || 或者的意思
{
return false;//返回一个false
}
//数据的后移
for(int i=L->length;i>i-1;i--)
{
L->date[i+1] = L->data[i];
}
L->data[i] = e;
L->length++;
return ture;
}
数据的删除
数据的删除和数据的插入是差不多相同的思想:
1、首先判断删除的元素的位置是否在表中,
2、利用给出的已知删除位置i,使用循环语句将i以后的所有数据向前覆盖,
3、表的长度减一
DropList(Sqlist *&L,int i)//表名,删除的位置
{
if(i<1||i>L->length+1)
return false;
i--;
//如果需要输出删除的数据的值,加一行e=L->data[i];
for( i ; i<L->length;i++)
L->data[i] = L->data[i+1];
L->length--;
return ture;
}
&在函数中是引用的作用
用于函数数据的返回
数据的查找
循环查找L中的数据与e做对比,相同就返回e中的位置值
SelectList(Sqlist *L,ElemType e)//
{
for(int i=0;i<L->length;i++)
{
if(L->data[i] ==e)
return i;
else
return 0;
}
}