线性表基本功能的c语言实现

#include<stdio.h>
#define false 0
#define ok 1
#define maxsize 10

//定义了线性表的结构
typedef struct {
    int list1[maxsize];
    int length;
}sqlist;

//初始化线性表
int initlist(sqlist *l)
{
    l->length = 0;
    return ok;
}

//向线性表插入数据
int listinsert(sqlist *l, int i, int e)
{
    int k;
    if (i>l->length + 1 || i<1 || i>maxsize)   //前两个表示i插入的位置不对,最后一个表示线性表满了
        return false;
    if (i<l->length)   //如果数据不在表尾,后面的数据后移
    {
        for (k = l->length-1; k>=i-1; k--)
            l->list1[k+1] = l->list1[k];
    }
    l->length++;
    l->list1[i - 1] = e;
    return ok;
}

//从线性表中删除数据,删除l中第i个元素并返回给e
int listdelete(sqlist *l, int i, int *e)
{
    int k;
    if (i<1 || i>l->length)
        return false;
    *e = l->list1[i - 1];
    if (i<l->length)
    {
        for (k = i; k<l->length; k++)
            l->list1[k - 1] = l->list1[k];
    }
    l->length--;
    return ok;
}

//查询线性表,将l中第i个元素返回给e
int getelem(sqlist l, int i, int *e)
{
    if (i >= l.length)
        return false;
    else
    {
        *e = l.list1[i-1];
        return ok;
    }
}


//显示线性表
int seelist(sqlist l)
{
    int i;
    for (i = 0; i < l.length; i++)
        printf("%4d", l.list1[i]);
    return ok;
}

int main(void)
{
    int i,data; 
    sqlist s1;
    i = initlist(&s1);
    if (i == 1)
    {
        puts("新的线性表创建成功,请输入前五个整数");
        for (i = 0; i < 5; i++)
        {
            listinsert(&s1, i+1, i);
        }
    }
    seelist(s1);
    listdelete(&s1, 4, &data);
    printf("\n被删除的元素是%d", data);
    printf("\n删除元素后的线性表是\n");
    seelist(s1);
    return 0;
}

此处实现了线性表的插入、删除、查询、显示的功能。

初步涉及结构的调用,一定要注意函数定义和调用结构,如果需要改变结构内的值,函数的参数需使用指针,否则直接调用实例,实例就和以前普通的变量a调用方法一样。比如插入操作改变了s1,这个函数就是int listdelete(sqlist *l, int i, int *e),此处l为指针;显示不需要改变s1,所以int seelist(sqlist l)。(此处指参数只是普通变量,而不是想修改的本身就是指针)

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值