1.数据结构线性表--顺序表
/*1.线性表之顺序表(逻辑结构)
静态顺序表 物理结构
动态顺序表 物理结构
2.运算
创建
销毁
增,删,查
*/
1.静态顺序表
include<stdio.h>
include<stdlib.h>
define MAXSIZE 200
typedef struct {
int data[MAXSIZE];
int length;
}Sqlist;
2.静态顺序表初始化
void InitList(Sqlist&l)
{
l.length=0;//逻辑初始化(长度=0)
}
3.静态顺序表摧毁
Sqlist DestroyList(Sqlist&L){
int i;
for(i=L.length-1;i>=0;i++){
L.data[i]=0;
}
L.length=0;//逻辑释放
return L;
}
2.动态(需要自己申请空间)
define initsize 100
typedef struct{
int data;
int maxsize;
int length;
}Sqlist1;
void InitList1(Sqlist&l)
l.data=(int)malloc(sizeof(int)*initsize);
l.length=0;
l.maxsize=initsize;//最大值也要初始化
}
增加长度(优点:相对于静态顺序表来说就是可以增加长度,缺点:需要空间很大,需要2*maxsize+len长度)
void IncreaseSize(Sqlist1 &q,int len){
int *p=q.data;
q.data=(int )malloc(sizeof(int)len);
for(int i=0;i<q.length;i++)//循环逻辑(用一个p指针指向原来 的数组,将L.data指向新建的顺序表,2.移动值,覆盖3.长度最大值更改 即可4.释放p指针)
{
q.data[i]=p[i];
}
q.maxsize=q.maxsize+len;
free(p);
}
顺序表插入操作
bool ListInsert(Sqlist &l,int i,int e){
if(i<1||i>l.length+1){return false;}//插入位置进行判断
if(l.length>=maxsize){return false;}//顺序表个数进行判断
for(int j=l.length;j>=i;j--){l.data[j]=l.data[j-1];}//位置:[l.length,i],移动n-i+1个元素,时间复杂度o(n)=
l.data[i-1]=e;//为什么用i-1,而不用j,为了更加理解,就是位置i处
l.length++;
return true;
}
顺序表删除操作(按位置)
bool ListDelete(Sqlist &l,int i,int &e){
if(i<1||i>l.length){return false;}//删除位置进行判断,是否出错
e=l.data[i-1];//赋值
for(int j=i;j<l.length;j++){l.data[j-1]=l.data[j];}//位置[i+1,l.length]=>下标[i,l.length-1] 等价于 for(int j=i+1;j<=l.length;j++){l.data[j-2]=l.data[j-1];} 循环次数n-i
l.length--;
return true;
}
顺序表按位查找
int GetElem(Sqlist &L,int i){
return L.data[i-1];//时间复杂度为0(1),随机存取,顺序存放
}
顺序表值查找
int GetPos(Sqlist &L,int i,int e){
for(int j=1;j<=L.length;j++){if(L.data[j-1]==e) return j;}//位置[1,length]
return 0;
}

浙公网安备 33010602011771号