顺序表的基本操作增 删 查 排序

本文介绍了一个简单的顺序表实现,包括创建、插入、删除、查找、排序等基本操作,并通过示例代码展示了这些功能的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序表的基本操作增 删 查 排序
//主函数 main.c


#include"seq_list.h"
int main()
{
    //seq_t *my_seq=create_list();
    seq_t *my_seq=create_list();
    //插入数据
    insert_list(my_seq,0,10);
    insert_list(my_seq,1,20);
    insert_list(my_seq,1,40);
    insert_list(my_seq,1,30);
    insert_list(my_seq,1,50);
    print_seq_list(my_seq);
    DATA_TYPE var=-1;
    del_list(my_seq,3,&var);
    printf("%d\n",var);
    print_seq_list(my_seq);
    DATA_TYPE VAR=search_list_data(my_seq,1);
    printf("%d\n",VAR);
    print_seq_list(my_seq);
   
    sort_seq_list(my_seq,0);
    print_seq_list(my_seq);
    sort_seq_list(my_seq,1);
    print_seq_list(my_seq);
    release_list(my_seq);
    my_seq=NULL;
    return 0;
}

//函数模块 创建seq_list.c


#include"seq_list.h"

//创建一个顺序表
seq_t *create_list()
{
    seq_t *ptemp=(seq_t *)malloc(sizeof(seq_t));
    if(NULL==ptemp)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"malloc error");
        exit(-1);
    }
    //数据初始化
    memset(ptemp,0,sizeof(seq_t));
    // ptemp->data[ptemp->lenth]=insert_data;
    // ptemp->lenth++;
    return ptemp;  
}



//插入数据
int insert_list(seq_t *my_seq,int pos,DATA_TYPE var)
{
    if(NULL==my_seq)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
        exit(-1);
    }
    if(pos<0||pos>my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"插入位置有误 error");
        return -1;
    }
    if(N==my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表已经满了 error");
        return -1;
    }
    int i=0;
    for(i=my_seq->lenth;i>pos;i--)
    {   
        my_seq->data[i]=my_seq->data[i-1];
    }
    my_seq->data[i]=var;
    my_seq->lenth++;
    return 0;

}
//删除数据
int del_list(seq_t *my_seq,int pos,DATA_TYPE *var)
{
    if(NULL==my_seq)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
        exit(-1);
    }
    if(pos<0||pos>=my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"删除位置有误 error");
        return -1;
    }
    if(0==my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空,无法删除 error");
        return -1;
    }
    int i=0;
    *var=my_seq->data[pos];
    for(i=pos;i<my_seq->lenth-1;i++)
    {
        my_seq->data[i]=my_seq->data[i+1];
    }
    my_seq->lenth--;
    return 0;

}


//遍历函数
int  print_seq_list(seq_t *my_seq)
{
    if(NULL==my_seq)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
        exit(-1);
    }
    if(0==my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空 error");
        return -1;
    }
    int i=0;
    for(i=0;i<my_seq->lenth;i++)
    {
        printf("%d  ",my_seq->data[i]);
    }
    printf("\n");

    return 0;
}
DATA_TYPE search_list_data(seq_t *my_seq,int pos)
{
    if(NULL==my_seq)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
        exit(-1);
    }
    if(pos<0||pos>=my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"删除位置有误 error");
        return -1;
    }
    if(0==my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空,无法删除 error");
        return -1;
    }
    DATA_TYPE VAR= my_seq->data[pos];
    return VAR;
}


//释放顺序表
void release_list(seq_t *my_seq)
{
    free(my_seq);
}


//排序
int sort_seq_list(seq_t *my_seq,int flag)
{
    if(NULL==my_seq)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
        exit(-1);
    }
    if(0==my_seq->lenth||1==my_seq->lenth)
    {
        printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空或只有一个元素,无法排序");
        return -1;
    }
        int i=1;
        int j=0;
    if(0==flag)//降序
    {
        for(i=1;i<=my_seq->lenth-1;i++)
        {
            for(j=0;j<my_seq->lenth-1-i+1;j++)
            {
                if(my_seq->data[j]<my_seq->data[j+1])
                {
                    DATA_TYPE ptemp=my_seq->data[j];
                    my_seq->data[j]=my_seq->data[j+1];
                    my_seq->data[j+1]=ptemp;
                }

            }
        }
            printf("----------------------\n");
    }
    else if(1==flag)//升序
    {
        for(i=1;i<=my_seq->lenth-1;i++)
        {
            for(j=0;j<my_seq->lenth-1-i+1;j++)
            {
                if(my_seq->data[j]>my_seq->data[j+1])
                {
                    DATA_TYPE ptemp=my_seq->data[j];
                    my_seq->data[j]=my_seq->data[j+1];
                    my_seq->data[j+1]=ptemp;
                }

            }
        }
            printf("----------------------\n");
    }
    else
    {
        printf("输入有误,请重新输入\n");
    }
}

创建一个头文件seq_list.h

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define  DATA_TYPE int
#define  N 5
typedef  struct __SEQ{

        DATA_TYPE data[N];
        int lenth;
}seq_t;


//创建一个顺序表
seq_t *create_list();

//插入数据
int insert_list(seq_t *my_seq,int pos,DATA_TYPE var);

//删除数据
int del_list(seq_t *my_seq,int pos,DATA_TYPE *var);


//释放函数
void release_list(seq_t *my_seq);

//遍历函数
int  print_seq_list(seq_t *my_seq);
//按位置查找数据
DATA_TYPE search_list_data(seq_t *my_seq,int pos);
//排序
int sort_seq_list(seq_t *my_seq,int flag);

在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值