顺序表示:
静态分配:
#include<stdio.h>
#include<stdio.h>
#define MaxSize 10 //定义最大长度
typedef struct{
int data[MaxSize]; //用静态的“数组”存放数据元素
int length; //顺序表的当前长度
}Sqlist;
void InitList(Sqlist &L){ //初始化表
for(int i = 0; i<Maxsize;i++)
L.data[i]=0; //将数据元素置0
L.length=0; //顺序表初始长度为0
}
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1) //判断i范围是否正确
return false;
if(L.length>=MaxSize) //判断存储空间是否满了
return false;
for(int j=L.length;j>=i,j--)
L.data[j]=L.data[j-1]; //将第i以后的所有元素往后移一位
L.data[i-1]=e; //在位置i放入插入的元素
L.length++; //长度加1
return true;
}
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length) //判断i范围是否正确
return false;
e=L.data[i-1]; //将被删除的元素值赋给e
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j]; //将第i以后的所有元素往前移一位
L.length--; //长度减1
return ture;
}
int GetElem(SqList L,int i){
return L.data[i-1];
}
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
int main(){
Sqlist L ; //声明一个顺序表
InitList(&L); //初始化表
ListInsert(&L,3,3); //插入操作
int e = -1; //用变量e将删除的元素"带回来"
if (ListDelete(&L,3,&e)) //删除操作
printf("已删除第3个元素,元素值为%d\n",e)
else
printf("位置i不合法,删除错误\n");
GetElme(L,4) //按位查找
LocateElem(L,7) //按值查找
return 0;
}
//InitList(&L) 初始化表
//DestroyList(&L) 销毁操作
//ListInsert(&L,i,e) 插入操作时间复杂度为O(n)
//ListDelete(&L,i,&e)删除操作时间复杂度为O(n)
//LocateElem(L,e) 按值查找时间复杂度为O(n)
//GetElme(L,i) 按位查找时间复杂度为O(1)
//Lengtth(L) 求表长
//PrintList(L) 输出操作
//Empty(L) 判空操作
动态分配:
#include<stdio.h>
#define IntSize 10 //默认的最大长度
typedef struct{
int *data //指示动态分配数组的指针
int MaxSize; //顺序表最大容量
int length; //顺序表的当前长度
}SeqList;
void InitList(Sqlist &L){ //初始化表
//用malloc函数申请一片连续的存储空间
L.data =(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.Maxsize=IntSize;
}
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i]; //将数据复制到新区域
}
L.MaxSize=L.MaxSize+len; //顺序表最大长度加len
free(p) //秤放原来内存空间
int main(){
SeqList L ; //声明一个顺序表
InitList(&L); //初始化表
IncreaseSize(L,5) //增加5的内存大小
return 0;
}