顺序表的基本操作(c语言实现)

 

学习日志2:      

       这是我自己写的用c语言写的实现顺序表的基本操作的代码,内容简单,容易理解,在此分享给大家,经过测试是可以运行的,下面这段代码包括插入、删除、操作这三个基本操作,我不做过多的讲解,一些算法思想大家可以去参考其他博主写的教程,他们说的非常详细,本次的分享只是学习成果的分享,供大家参考,代码一些注释可能有误,希望大家谅解,也请各位大佬明确指出需要改进的地方!我会认真修改,大家可以参考耿国华的《数据结构—用C语言描述(第3版)》                                                               

#include<stdio.h>
#include<stdlib.h>
#define maxsize 100//顺序表最大的空间 
typedef struct
{
    int elem[maxsize];//顺序表中的元素 
    int last;//顺序表最后一个元素的下标 
}seplist;
int inslist(seplist* L,int i,int e);//插入
int delist(seplist* L,int i,int *e);//删除 
int locate(seplist L,int e);//查找 
void main()
{
    //顺序表的建立
    int n,i,j,e;
    seplist L;
    int M;
    printf("请输入线性表的长度\n");
    scanf("%d",&n);
    L.last=n-1;
    printf("请输入顺序表各个元素\n");
    for(i=0;i<=L.last;i++)
    scanf("%d",&L.elem[i]);
    printf("顺序表为\n"); 
    for(i=0;i<=L.last;i++)
    printf("%d ",L.elem[i]);
    printf("\nlast的值为 %d\n",L.last);
    //顺序表建立已经完成
    //下面为插入
    printf("\n接下来进行插入操作\n");
    printf("请输入需要插入元素的位置\n");
    scanf("%d",&j);//j为插入元素的位置
    printf("请输入需要插入元素的内容\n");
    scanf("%d",&e);//e为插入元素的内容 
    if(inslist(&L,j,e)==0)//返回值为0 
    {
        printf("插入失败\n");//开始重新插入
        printf("开始重新插入\n"); 
        printf("请输入需要插入元素的位置和内容");
        scanf("%d%d",&j,&e);
        inslist(&L,i,e);
        printf("\n");
    }
    printf("新的顺序表为\n");
    for(i=0;i<=L.last;i++)
    printf("%d ",L.elem[i]);
    printf("\n");
    printf("插入成功\n");
    printf("last的值为 %d\n",L.last);
    //插入已经完成 
    //下面为删除
    printf("\n下面进行删除的操作\n");
    printf("请输入删除的位置\n");
    scanf("%d",&j);//j为删除位置
    if(delist(&L,j,&M)==0)//M为需要返回的删除值 
    {
        printf("删除失败!\n");//开始重新删除 
        printf("下面进行重新删除\n");
        printf("请输入删除的位置\n");
        delist(&L,j,&M); 
    }
    printf("新的顺序表为\n");
    for(i=0;i<=L.last;i++)
    printf("%d ",L.elem[i]);
    printf("\n");
    printf("删除成功!\n");
    printf("删除数为 %d\n",M);
    printf("last的值为 %d\n",L.last);
    //删除已经完成
    //下面为查找
    printf("\n下面进行查找操作\n");
    printf("请输入查找元素的内容\n");
    scanf("%d",&e);
    if(locate(L,e)!=-1)
    {
        printf("查找成功!\n");
        printf("查找的内容为%d\t查找的位置为%d\n",e,locate(L,e)); 
    }
    else
    printf("查找失败!\n");
    system("pause");
} 

//下面为插入
int inslist(seplist* L,int i,int e)//i为插入的位置,e为插入的元素 
{
    int k;
    if((i<1)||(i>L->last+2))//判断插入的位置是否合法
    {
        printf("\n插入位置不合法\n");
        return 0;//0插入失败 
    }
    if((L->last>=maxsize-1))//判断插入的位置是否插入表的外面
    {
        printf("\n表已满,无法插入\n");
        return 0;//0插入失败 
    }
    for(k=L->last;k>=i-1;k--)//从最后开始依次将元素往后移, 
        L->elem[k+1]=L->elem[k];//直到插入位置的下标停下 
    L->elem[i-1]=e;//插入元素
    L->last++;//顺序表的大小变化
    return 1; 
}
//下面为删除
int delist(seplist* L,int i,int *e)//i是删除的位置,e为删除的元素内容 
{
    int k;
    if((i<1)||(i>L->last+1))//判断删除的位置是否合法 
    {
        printf("\n删除位置不合法\n");
        return 0;
    }
    *e=L->elem[i-1];//将删除的元素存放到e所指向的变量中
    for(k=i;k<=L->last;k++)
        L->elem[k-1]=L->elem[k];
    L->last--;//顺序表的大小变化
    return 1; 
} 
//下面为查找
int locate(seplist L,int e)//e为查找的元素
{
    int i=0;//i为计时器,初值为0
    while ((i<=L.last)&&(L.elem[i]!=e))
    i++;
    if(i<=L.last)
    return i+1;//找到e返回位置
    else 
    return -1;//没找到返回-1 
} 

以上代码,理解起来并不困难,有问题可以留言告知我!

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值