数据结构第一天作业

 删除重复数据(将先出现的数据与后面的数据对比,如果有重复的将后面的数据删除)
提示:可以直接使用按位置删除的函数 顺序表中原有:1 2 2 1 1 3 4 3 2 4 5 3 4 5 4 1
......
顺序表中存储:1 2 3 4 5

#include "gsj.h"
#define MAX_SIZE 100
typedef struct {
    int data[MAX_SIZE];
    int length;
} SeqList;


void removeDuplicates(SeqList *list) {
    for (int i = 0; i < list->length - 1; ++i) {
        for (int j = i + 1; j < list->length;) {
            if (list->data[i] == list->data[j]) {
                for (int k = j; k < list->length - 1; ++k) {
                    list->data[k] = list->data[k + 1];
                }
                list->length--;
            } else {
                j++;
            }
        }
    }
}

void printList(SeqList *list) {
    for (int i = 0; i < list->length; ++i) {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

int main() {
    SeqList myList = {{1, 2, 2, 1, 1, 3, 4, 3, 2, 4, 5, 3, 4, 5, 4, 1}, 16};

    printf("初始数组: ");
    printList(&myList);
    removeDuplicates(&myList);
    printf("重置过后: ");
    printList(&myList);

    return 0;
}

 顺序存储全部功能实现代码如下:

 函数功能实现

#include "gsj.h"
#include "03_Seq.h"
//创建顺序表
Seq* aet_seq()
{
    // int data[N]={0};
    // int pos=0;
    //malloc申请一个堆空间
    Seq *list =(Seq*)malloc(sizeof(Seq));
    //内存置位
    memset(list,0,sizeof(Seq));
    return list;
}
//插入数据
void ert_stu(Seq *list,dataType msg)
{
    if(list->pos >= N){
        printf("满了\n");
        // return -1;
        }
    list->data[list->pos]=msg;
    list->pos++;
   
    // return 0;
}
//遍历数据
void show_seqList(Seq* list){
    for(int i=0;i<list->pos;i++){
        printf("%d\n",list->data[i]);
    }
    
    // return;
}
//尾部删除
dataType delete_seq(Seq *list){
    if(list->pos==0){
        printf("顺序表为空,删除失败\n");
        return (dataType)-1;
    }

    list->pos--;
    dataType data=list->data[list->pos];
    return data;
}
//向指定位置删除数据
void delete_ceq(Seq* list){
    int a;
    printf("输入下标\n");
    scanf("%d",&a);
     for(int i=a;i<=list->pos;i++){
        list->data[i]=list->data[i+1];
    }
    list->pos--;
}
//向指定位置插入数据
void dalete_aeq(Seq* list,dataType msg){
    if(index>list->pos || index<0){
       printf("无法插入\n");
        // return -1;
    }
    if(list->pos >= N){
        printf("满了\n");
        // return -1;
        }
    int index=0;
    printf("输入要插入的位置\n");
    scanf("%d",&index);
    for(int i=list->pos;i>index;i--){
        list->data[i]=list->data[i-1];
    }
    list->data[index]=msg;
    list->pos++; //插入数据需要更新顺序表长度
}
//按下标位置进行修改
void dalete_cachoong(Seq *list,dataType msg){
    int a;
    printf("输入下标\n");
    scanf("%d",&a);
    if(a>=list->pos || a<0){
        printf("a=%d下标位置非法,无法修改\n",a);

    }
    list->data[a]=msg;


}
//按下标位置对数据进行查询
dataType dalete_cach(Seq *list){
     int a;
    printf("输入下标\n");
    scanf("%d",&a);
    if(a>=list->pos || a<0){
        printf("a=%d下标位置非法,无法修改\n",a);
        return(dataType)-1;

    }
    return list->data[a];
}

 主函数main引用功能函数

 

#include "gsj.h"
#include "03_Seq.h"
int main(){
    //创建顺序表
    Seq* list = aet_seq();
    //插入数据
    ert_stu(list,100);
    ert_stu(list,104);
    ert_stu(list,104);
    ert_stu(list,105);
    ert_stu(list,107);
    show_seqList(list);
    //尾部删除
    dataType data;
    data=delete_seq(list);
    printf("%d\n",data);
    //向指定位置删除数据
    delete_ceq(list);
    show_seqList(list);
    //向指定位置插入数据
    dalete_aeq(list,66);
    show_seqList(list);
    //按下标位置进行修改
    dalete_cachoong(list,100);
    //按下标位置对数据进行查询
    dalete_cach(list);
    return 0;
}

宏定义,函数声明 包头文件

#ifndef __SEQ__
#define __SEQ__
#define N 10
typedef int dataType;
typedef struct{
    dataType data[N];
    int pos;
}Seq;
Seq* aet_seq();
void ert_stu(Seq *list,dataType msg);
void show_seqList(Seq* list);
dataType delete_seq(Seq *list);
void delete_ceq(Seq* list);
void dalete_aeq(Seq* list,dataType msg);
void dalete_cachoong(Seq *list,dataType msg);
dataType dalete_cach(Seq *list);
#endif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值