顺序表--增删改查等

seq_list.h

#ifndef _seq_list_h
#define _seq_list_h

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define N 10

typedef struct abc{
    int data;
}data_t;

typedef struct stt{
    data_t s[N];
    int count;
}seq_list;

void seqlist_create(seq_list **my_list);
void seqlist_tail_add(seq_list *my_list,int data);
void seqlist_print(seq_list *my_list);
void seqlist_pos_add(seq_list *my_list,int data,int pos);
void seqlist_tail_del(seq_list *my_list);
void seqlist_pos_del(seq_list *my_list,int pos);
void seqlist_val_chg(seq_list *my_list,int oldval,int newval);
void seqlist_pos_val_chg(seq_list *my_list,int pos,int val);
int seqlist_pos_search(seq_list *my_list,int pos);
void seqlist_sort(seq_list *my_list);
void seqlist_solo(seq_list *my_list);
void seqlist_clr(seq_list *my_list);
void seqlist_destroy(seq_list **my_list);

#endif

seq_list.c

#include "seq_list.h"

void seqlist_create(seq_list **my_list){
    *my_list=(seq_list *)malloc(sizeof(seq_list));
    memset(*my_list,0,sizeof(seq_list));
}

void seqlist_tail_add(seq_list *my_list,int data){
    if(my_list->count>=N){
        printf("表已满,插入失败\n");
        return;
    }
    (my_list->s[my_list->count]).data=data;
    (my_list->count)++;
}

void seqlist_print(seq_list *my_list){
    for(int i=0;i<my_list->count;i++){
        printf("%d ",my_list->s[i].data);
    }
    putchar('\n');
}

void seqlist_pos_add(seq_list *my_list,int data,int pos){
    if(my_list->count>=N){
        printf("表已满,插入失败\n");
        return;
    }
    if(pos<0||pos>my_list->count){
        printf("插入位置有误,插入失败\n");
        return;
    }
    if(my_list->count==pos){
        seqlist_tail_add(my_list,data);
        return;
    }
    for(int i=0;i<(my_list->count-pos);i++){
        my_list->s[my_list->count-i].data=my_list->s[my_list->count-i-1].data;
    }
    my_list->s[pos].data=data;
    (my_list->count)++;
}

void seqlist_tail_del(seq_list *my_list){
    if(my_list->count==0){
        printf("表已空,删除失败\n");
        return;
    }
    (my_list->s[my_list->count]).data=0;
    (my_list->count)--;
}

void seqlist_pos_del(seq_list *my_list,int pos){
    if(my_list->count==0){
        printf("表已空,删除失败\n");
        return;
    }
    if(pos<0||pos>=my_list->count){
        printf("删除位置有误,删除失败\n");
        return;
    }
    for(int i=0;i<my_list->count-pos;i++){
        my_list->s[pos+i].data=my_list->s[pos+1+i].data;
    }
    my_list->count--;
}

void seqlist_val_chg(seq_list *my_list,int oldval,int newval){
    int flag=0;
    for(int i=0;i<my_list->count;i++){
        if(my_list->s[i].data==oldval){
            my_list->s[i].data=newval;
            flag++;
        }
    }
    if(flag==0){
        printf("%d不存在,修改失败\n",oldval);
    }
}

void seqlist_pos_val_chg(seq_list *my_list,int pos,int val){
    if(pos<0||pos>=my_list->count){
        printf("修改位置有误,修改失败\n");
        return;
    }
    my_list->s[pos].data=val;
}

int seqlist_pos_search(seq_list *my_list,int pos){
    if(pos<0||pos>=my_list->count){
        printf("查找位置有误,查找的值无效\n");
        return -1;
    }
    return my_list->s[pos].data;
}

void seqlist_sort(seq_list *my_list){
    int tmp=0;//3 4 2 1 6 7 5 0
    for(int i=0;i<my_list->count-1;i++){
        for(int j=0;j<my_list->count-1-i;j++){
            if(my_list->s[j].data>my_list->s[j+1].data){
                tmp=my_list->s[j].data;
                my_list->s[j].data=my_list->s[j+1].data;
                my_list->s[j+1].data=tmp;
            }
        }
    }
    printf("排序完成\n");
}

void seqlist_solo(seq_list *my_list){
    for(int i=0;i<my_list->count;i++){
        for(int j=i+1;j<my_list->count;j++){
            if(my_list->s[i].data==my_list->s[j].data){
                seqlist_pos_del(my_list,j);
                my_list->count--;
                j--;
            }
        }
    }    
}

void seqlist_clr(seq_list *my_list){
    my_list->count=0;
}

void seqlist_destroy(seq_list **my_list){
    free(*my_list);
    *my_list==NULL;//指针还存在,防止野指针
}

main.c

#include "seq_list.h"

int main(int argc, const char *argv[]){
    seq_list *my_list=NULL;
    seqlist_create(&my_list);
    seqlist_tail_add(my_list,5);
    seqlist_tail_add(my_list,1);
    seqlist_tail_add(my_list,4);
    seqlist_tail_add(my_list,2);
    seqlist_tail_add(my_list,3);
    seqlist_print(my_list);// 5 1 4 2 3
    seqlist_pos_add(my_list,0,4);
    seqlist_print(my_list);//5 1 4 2 0 3
    seqlist_tail_del(my_list);
    seqlist_print(my_list);//5 1 4 2 0
    seqlist_pos_del(my_list,1);
    seqlist_print(my_list);//5 4 2 0
    seqlist_val_chg(my_list,5,3);
    seqlist_print(my_list);//3 4 2 0
    seqlist_pos_val_chg(my_list,3,1);
    seqlist_print(my_list);//3 4 2 1
    int val=seqlist_pos_search(my_list,2);
    printf("%d\n",val);//2
    seqlist_tail_add(my_list,6);
    seqlist_tail_add(my_list,7);
    seqlist_tail_add(my_list,5);
    seqlist_tail_add(my_list,0);
    seqlist_print(my_list);//3 4 2 1 6 7 5 0
    seqlist_sort(my_list);
    seqlist_print(my_list);//0 1 2 3 4 5 6 7
    seqlist_tail_add(my_list,6);
    seqlist_tail_add(my_list,7);
    seqlist_pos_val_chg(my_list,3,1);
    seqlist_pos_val_chg(my_list,4,1);
    seqlist_print(my_list);//0 1 2 1 1 5 6 7 6 7
    seqlist_solo(my_list);
    seqlist_print(my_list);//0 1 2 5 6 7
    seqlist_clr(my_list);
    seqlist_print(my_list);//空
    seqlist_destroy(&my_list);
    
    return 0;
}

编译:gcc seq_list.c main.c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值