数据结构-顺序表

发布于:2025-02-19 ⋅ 阅读:(164) ⋅ 点赞:(0)

1.顺序表的概念


顺序表:线性表的顺序存储,称为顺序表(数组)
线性表:是由多个类型相同
个数有限的数据元素组成的集合(属相)
顺序表:逻辑结构线性结构
存储结构:顺序存储
线性表的分类:顺序表,链表,栈,队列,数组,字符串

2顺序表的基本操作


2.1 创建顺序表

 Sqlist * create_Sqlist()
{
        //创建数据表
        Sqlist* list=(Sqlist*)malloc(sizeof(Sqlist));
        if(NULL==list)
        {
        printf("creat_Sqlist false");
        return NULL;
        }
        //对数据元素清0
        memset(list->data,0,sizeof(list->data));
        //对顺序表长度清0
        list->len=0;
        return list;
}


2.2 顺序表的尾插

//尾插
int insert_rear(datatype element,Sqlist* list)
{
        //判满判空
        if(NULL==list||list->len==MAXSIZE)
        {
                printf("insetr_rear error\n");
                return FALSE;
        }
        //尾插
        list->data[list->len]=element;
        list->len++;
        return  SUCCESS;
}


2.3 顺序表的遍历

      //循环遍历顺序表
int output_Sqlist(Sqlist *list)
{
        //1.顺序表创建失败
        //2.判空
        if(NULL==list || list->len==0)
        {
        printf("out_sqlist error");
        return FALSE;
        }
        int i=0;
        while(i++<list->len)
        {
                printf("%d",list->data[i]);
        }
        return SUCCESS;
}


2.4 顺序表尾删

//尾删
int  delete_rear(Sqlist* list)
{
        //判断创建
        //判空
        if(NULL==list ||list->len==0)
        {
                printf("detele_rear error\n");
                return FALSE;
        }
        //尾删
        list->data[list->len-1]=0;
        list->len--;
        return SUCCESS;
}


2.5 顺序表按下表查找

//按下标查找
int locate_sub(Sqlist *list,int sub)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("insert_1 error");
        return FALSE;
        }
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //2.查找
        printf("%d",list->data[sub]);
        return SUCCESS;
}


2.6 顺序表按下表删除

//按下标删除
int delete_sub(Sqlist *list,int sub)
{
        //1.判空
        //2.判溢出
        //3.按下标
        if(list->len==0&&NULL==list&&sub>0&&sub<list->len)
        {
                printf("delete_sub error");
                return FALSE;
        }
        for(int i=sub+1;i<list->len;i++)
        {
        list->data[i-1]=list->data[i];
        }
        list->len--;
        return SUCCESS;
}


2.7 顺序表按下表修改

//按下标修改
int revise_sub(Sqlist *list,int sub,datatype element)
{
        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("insert_1 error");
        return FALSE;
        }
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //2.修改
        list->data[sub]=element;
        printf("%d",list->data[sub]);
        return SUCCESS;
}


2.8 顺序表按下表插入

//按下标插入
int insert_sub(Sqlist *list,int sub,datatype element)
{
        //1.插入失败
        if(NULL==list||list->len==0)
        {
        printf("insert_sub error");
        return FALSE;
        }
        //2.创建
        //3.判断插入下标
        if(sub<0 ||sub>list->len)
        {
                printf("insert_sub error");
                return FALSE;
        }
        //4.插入
        for(int i=list->len-1;i>=sub;i--)
{
        list->data[i+1]=list->data[i];
        }
        list->data[sub]=element;
        list->len++;
        return SUCCESS;
}

2.9顺序表按元素查找

//按元素查找
int locate_element(Sqlist *list,datatype element)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("create error");
        return FALSE;
        }
        //2.查找
        for(int i=0;i<list->len;i++)
        {
                if(element==list->data[i])
                {
                        return i;
                }
        }
        return FALSE;
}


2.10 顺序表按元素删除

//按元素删除
int delete_element(Sqlist *list,datatype element)
{
        int sub=locate_element(list,element);
        delete_sub(list,sub);
}


2.11 顺序表按元素修改

//按元素修改
int revise_element(Sqlist *list,datatype element1,datatype element2)
{
        int sub=locate_element(list,element1);
        revise_sub(Sqlist *list,datatype element2);
        return SUCCESS;
}

2.12去重

//去重
void deduplication(Sqlist *list)
{

        //1.判断
        if(NULL==list||list->len==0)
        {
        printf("craete error");
        return NULL;
        }
        for(int i=0;i<list->len;i++)
        {
                for(int j=i;j<list->len;j++)
                {
                        if(list->data[i]==list->data[j])
                        {
                                delete_sub(list,j);
                                j--;
                        }
                }
        }
}

2.13冒泡排序

//冒泡排序
void bubble_sort(Sqlist *list)
{
        int temp;
        for(int i=0;i<list->len;i++)
        {
                for(int j=0;j<list->len-i-1;j++)
                {
                        if(list->data[j]>list->data[j+1])
                        {
                                int temp=list->data[j];
                                list->data[j]=list->data[j+1];
                                list->data[j+1]=temp;
                        }
                }
        }
                int temp=list->data[i];
                list->data[i]=list->data[min];
                list->data[j]=temp;
}

2.14选择排序

/选择排序
void select_sort(Sqlist *list)
{
        int min;
        for(int i=0;i<list->len;i++)
        {
                int min=i;
                for(int j=i+1;j<list->len;j++)
                {
                        if(list->data[j]>list->data[min])
                        {
                                min=j;
                        }
                }
                int temp=list->data[i];
                list->data[i]=list->data[min];
                list->data[j]=temp;
        }
}

注:判断也可单独封装为一个函数。