数据结构线性表——顺序表代码(戴敏版)
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
//定义结构体类型
typedef struct Sqlist{
int data[MaxSize];
int length;
};
//初始化操作
Sqlist *Init_Sqlist(Sqlist *L){
// Sqlist *L;
// L = (Sqlist *)malloc(sizeof(Sqlist));
// if(!L){
// printf(“申请失败”);
// exit(1);
// }
L->length = 0;
return L;
}
//插入操作
Sqlist *Increase_Sqlist(Sqlist *L,int i,int x){
if( (i<1) || (i>L->length+1)){
printf(“插入失败,请检查您的插入位置!”);
exit(1);
}
if(L->length >MaxSize){
printf(“位置已满,插入失败!”);
exit(1);
}
for(int k = L->length-1; k >= i-1; k–){
L->data[k+1] =L->data[k];
}
L->data[i-1] = x;
L->length++;
return L;
}
插入操作的时间复杂度分析
//删除操作
Sqlist * Delete_Sqlist(Sqlist *L,int i,int &x){
if( (i<1) || (i>L->length)){
printf(“删除失败,请检查您的删除位置!”);
exit(1);
}
if(L->length==0){
printf(“顺序表为空,删除失败!”);
exit(1);
}
x = L->data[i-1];
for(int j = i-1; j<=L->length-1;j++){
L->data[j] = L->data[j+1];
}
L->length–;
return L;
}
时间复杂度分析
//查找操作,返回数值的数组下标
int LocateElem_Sqlist(Sqlist *L,int x){
int m = 1;
while(m<=L->length&&L->data[m-1]!=x){
m++;
}
if(m>L->length){
printf(“没有找到!”);
return -1;
}
else{
return m-1;
}
}
时间复杂度分析
//主函数
int main(){
int x;
Sqlist *L;
L = (Sqlist *)malloc(sizeof(Sqlist));
if(!L){
printf(“申请失败”);
exit(1);
}
Init_Sqlist(L);
Increase_Sqlist(L,1,999);
Increase_Sqlist(L,2,888);
Increase_Sqlist(L,3,777);
Sqlist *l = Increase_Sqlist(L,4,666);
printf(“插入后的数组为:\n”);
for(int i=0;ilength;i++){
printf(" %d",l->data[i]);
}
printf("\n");
Sqlist *l2 = Delete_Sqlist(L,2,x);
printf(“删除的值为:%d\n”,x);
printf(“删除后的数组为:\n”);
for(int i=0;ilength;i++){
printf(" %d",l2->data[i]);
}
printf("\n");
int m = LocateElem_Sqlist(L,666);
printf(“查找值666的数组下标为:%d\n”,m);
}