顺序表的操作

目录

1.结构体设置

2. 顺序表初始化

3.插入一个数据到顺序表指定的位置

4.遍历函数

5.删除某个位置的数据

6.查询某个数据的位置

7.修改某个数据为新的数据

8.插入某个数据到顺序表,保持顺序表递增有序

9.删除某个数据,保持顺序表递增有序


1.结构体设置

typedef struct Seq
{
	int *data;
	int length;
	int size;
}seq;

2. 顺序表初始化

// 顺序表初始化
seq *seq_init(void)
{
    seq *p=(seq *)malloc(sizeof(seq));
    p->data=(int *)malloc(sizeof(int)*5);
    p->length=0;
    p->size=5;
    
    return p;
}

3.插入一个数据到顺序表指定的位置

// 插入一个数据到顺序表指定的位置
void seq_insert(seq *p,int elem,int add)  // 1 2 3 4     length=4  elem=10  add=2
{
    if(add<1 || add>p->length+1)
    {
        return;
    }
    if(p->length==p->size)
    {
        p->data=(int *)realloc(p->data,sizeof(int)*(p->size+1));
        p->size++;
    }
    
    int i;
    for(i=p->length;i>=add;i--)
    {
        p->data[i]=p->data[i-1];
    }
    p->data[add-1]=elem;
    p->length++;
    
}

4.遍历函数

// 遍历函数
void display(seq *p)
{
    int i;
    for(i=0;i<p->length;i++)
    {
        printf("%d >> ",p->data[i]);
    }
    printf("\n");
}

5.删除某个位置的数据

//删除某个位置的数据
int seq_del(seq *p,int add)   // 1 2 3 4  add=2
{
    if(add<1 || add>p->length)
    {
        return -1;
    }
    
    int i;
    for(i=add;i<p->length;i++)
    {
        p->data[i-1]=p->data[i];
    }
    p->length--;
    return 0;
}

6.查询某个数据的位置

// 查询某个数据的位置
int seq_search(seq *p,int elem)
{
    int i;
    for(i=0;i<p->length;i++)
    {
        if(p->data[i]==elem)
        {
            return i+1;
        }
    }
    return -1;
}

7.修改某个数据为新的数据

// 修改某个数据为新的数据
void seq_change(seq *p,int elem,int newelem)
{
    int add=seq_search(p,elem);
    p->data[add-1]=newelem;
    
}

8.插入某个数据到顺序表,保持顺序表递增有序

// 插入某个数据到顺序表,保持顺序表递增有序
void seq_test_insert(seq *p,int elem)  //2 4 6 8    elem=5
{
    int i;
    for(i=0;i<p->length;i++)
    {
        if(elem<p->data[i])
        {
            break;
        }
        
    }
    
    seq_insert(p,elem,i+1);
}

9.删除某个数据,保持顺序表递增有序

// 删除某个数据,保持顺序表递增有序
void seq_test_del(seq *p,int elem)  //2 4 5 8    6  
{
    int i;
    for(i=0;i<p->length;i++)
    {
        if(elem==p->data[i])
        {
            break;
        }
        
    }
    seq_del(p,i+1);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值