顺序表的创建,插入,修改,删除,查询代码

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

int num[100];

#define MAX 100
typedef int DATATYPE;

typedef struct 
{
    DATATYPE buf[MAX];
    int n;//代表了数组下标
}seqlist;
seqlist *create_empty_seqlist()
{
    seqlist *l;

    l = (seqlist *)malloc(sizeof(seqlist));
    if(l == NULL)
    {
        printf("create_empty_seqlist error\n");
        return NULL;
    }

    l->n = -1;

    return l;
}

int insert_data(seqlist *l,DATATYPE data)
{
    if(l->n > MAX)  
    {
        printf("data input error\n");
        return -1;
    }

    l->n ++;//先使n变成0
    l->buf[l->n] = data;

    return 0;
}

void print_data(seqlist *l)
{
    int i;

    for(i = 0;i <= l->n;i ++)
    {
        printf("%d ",l->buf[i]);
    }
    printf("\n");
}

int insert_assign_data(seqlist *l,DATATYPE data,int post)
{
    int move;

    move = l->n + 1 - post + 1;

    int i;
    i = l->n;

    for(;move > 0;move --)
    {
        l->buf[i + 1] = l->buf[i];
        i --;
    }

    l->buf[post - 1] = data;
    l->n ++;

    return 0;
}

int delete_assign_data(seqlist *l,DATATYPE data)
{
    int i;
    int j = 0;
    for(i = 0;i <= l->n;i ++)
    {
        if(l->buf[i] != data)
        {
            l->buf[j ++] = l->buf[i];
        }
    }
    l->n = j - 1;
    return 0;
}

int find_data(seqlist *l,int data)
{
    int i;
    int j = 0;      
    for(i = 0;i <= l->n;i ++)
    {
        if(l->buf[i] == data)
        {
            num[j ++] = i; 
        }
    }

    return j;
}

int main(int argc, const char *argv[])
{
    seqlist *l;
    //给顺序表分配空间。
    l = create_empty_seqlist();

    int i;
    int data;
    for(i = 0;i < 10;i ++)
    {
        scanf("%d",&data);
        //插入元素
        insert_data(l,data);
    }

//  insert_assign_data(l,100,2);

//  delete_assign_data(l,4);//删除表中指定为4的数据
    print_data(l);

    int count;
    count = find_data(l,4);//找出所有值为4的元素下标
    printf("下标为:");
    for(i = 0;i < count;i ++)
    {
        printf("%d ",num[i]);
    }
    printf("\n");
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值