数据结构day3

一. 线性表:用来存储类型相同的数据元素的有限集合【数组、生肖、星座】
1>逻辑结构:线性结构【一对一】
2>存储结构:顺序存储、链式存储
线性表:顺序表、链表、栈、队列、字符串、数组

二. 顺序表:线性表的顺序存储
顺序表借助于一维数组实现,但是顺序表不等价于一维数组 seq list
下标从0开始
线性表的长度:顺序表的最大空间,一旦申请,则不会改变
顺序表长度:实际元素的个数,会随着数据元素的增删发生改变
顺序表满,线性表长度==顺序表长度
顺序表空:顺序表len=0;
顺序表结构:数据元素+顺序表长度

作业:

  1. 顺序表按元素查找
    #define dataType int
    #define MAXSIZE 8
    typedef struct{
    dataType data[MAXSIZE];
    int len;

}seqlist;

int find_data(seqlist* list,dataType e) {
if(list==NULL||empty_seqlist(list))
{
printf(“查找失败\n”);
return -1;
}
for(int i=0;ilen;i++) {
if(list->data[i]==e) return i;
}
return -1;

}
2. 顺序表按元素删除
int delete_data(seqlist* list,dataType e) {
int res = find_data(list,e);
if(res==-1) {
printf(“删除失败\n”);
return -1;
}
delete_sub(list,res);

}
int delete_sub(seqlist* list,int sub) {
if(list==NULL ||empty_seqlist(list)||sub<0 || sub>=list->len) {
printf(“按下标删除失败”);
return -1;
}
for(int i=sub+1;ilen;i++) {
list->data[i-1]=list->data[i];
}
list->len–;
printf(“按下标删除成功\n”);

return 0;

}
3. 顺序表按元素插入
int insert_data(seqlist* list,dataType e) {
int index = find_data(list,e);
if(index==-1) {
printf(“插入元素失败\n”);
}
insert_sub(list,e,index+1);
return 0;
}
int insert_sub(seqlist* list,dataType e,int sub) {
if(list==NULL||full_seqlist(list)||sub<0||sub>list->len) {
printf(“按下标插入失败\n”);
return -1;
}
for(int i=list->len-1;i>=sub;i–) {
list->data[i+1]=list->data[i];
}
list->data[sub] = e;
list->len++;
printf(“按下标插入成功\n”);
return 0;

}

  1. 顺序表按元素修改
    int update_data(seqlist* list,dataType origin,dataType value) {
    int res = find_data(list,origin);
    if(res==-1) {
    printf(“修改元素失败\n”);
    return -1;
    }
    update_sub(list,value,res);
    return 0;
    }
    int update_sub(seqlist* list,dataType e,int sub) {
    if(list==NULL || empty_seqlist(list)||sub<0||sub>=list->len) {
    printf(“修改失败!\n”);
    return -1;
    }
    list->data[sub] = e;
    printf(“修改成功!\n”);
    return 0;

}
5.顺序表排序
int sortSeqlist(seqlist* list) {
for(int i=0;ilen-1;i++) {
for(int j=0;jlen-i-1;j++) {
if(list->data[j]>list->data[j+1]) {
dataType t = list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=t;
}

}

}
printf(“排序成功!\n”);
return 0;

}

6.顺序表空间释放
seqlist * freeSpace(seqlist* list) {
if(list==NULL) {
return NULL;
}

free(list);
list=NULL;
return list;

}
7. 顺序表去重
int distinctSeqlist(seqlist* list) {
if(list==NULL||empty_seqlist(list)) {
printf(“去重失败\n”);
return -1;
}
for(int i=0;i< list->len;i++) {

for(int j=i+1;j< list->len;j++) {

if(list->data[i]==list->data[j]) {
delete_sub(list,j);
}
}
}
printf(“去重成功!\n”);

return 0;
}
8.顺序表有序合并
int groupSeqlist(seqlist* list) {
if(list==NULL||empty_seqlist(list)) {
printf(“有序合并失败”);
return -1;
}
int count;
for(int i=0;ilen;i++) {
count=0;
for(int j=0;jlen;j++) {

if(list->data[i]==list->data[j]&&i!=j) {
delete_sub(list,j);

count++;
}
}
for(int i=0;i<count;i++) {
insert_data(list,list->data[i]);
}
}
printf(“合并成功!\n”);

return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值