【数据结构】顺序线性表的几种常用方法

  ①:在线性表中插入数据

int insertlist (seqlist *l, int i, int x)    //在线性表中插入数据
{
    int k;

    if(i < 1 || i > l->last + 1)
    {
        printf("插入的位置不合法");
        return(ERROR);
    }

    if(l->last >= maxsize-1)
    {
        printf("线性表已经存满");
    }

    for(k = l->last; k >= i - 1;k--)
    {
        l->elem[k + 1] = l->elem[k];
    }
    l->elem[i-1] = x;
    l->last++;        //不要忘记把last加一
    return(OK);
}

  ②:删除线性表中的元素:

int deletelist(seqlist *l, int i)        //删除元素
{
    int k;
    if(i < 1 || i > l->last + 1)
    {
        printf("删除位置不合法");
        return(ERROR);
    }
    
    for(k = i;k < l->last;k++)
    {
        l->elem[k - 1] = l->elem[k];
    }
    l->last--;
    return(OK);
}

  ③:查找线性表元素:

int locate(seqlist *l, int x)        //查找元素
{
    int i;
    int k;
    for(i = 0;i < l->last;i++)
    {
        if(l->elem[i] == x)
        {
            k = i;
        }
        else
        {
            k = 0;
        }
    }
    return k;
}

所有代码:

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

#define maxsize 1024
#define OK 1
#define ERROR 0

typedef struct
{
        int elem[maxsize];
        int last;        
}seqlist; 

int main()
{
    int len,i,j; 
    int position,value;
    int delpos;
    int locval,loci;
    seqlist *la;
    la=(seqlist *)malloc(sizeof(seqlist));    //分配空间

    printf("请输入字符串的长度:");
    scanf("%d",&len);
    la->last = len;    //设置线性表的长度

    printf("请依次输入数:");
    for(i=0;i<la->last;i++)
    {
        scanf("%d",&la->elem[i]);    //设置值 不要忘记&符号
    }

    printf("输入的数字如下:");    
    for(j=0;j<la->last;j++)            //输出数据
    {
        printf("%d \n",la->elem[j]);
    }

    printf("请输入要插入元素的位置:");
    scanf("%d",&position);

    printf("请输入要插入元素的值:");
    scanf("%d",&value);

    insertlist(la,position,value);

    printf("添加后的线性表如下:");
    for(j=0;j<la->last;j++)            //输出数据
    {
        printf("%d \n",la->elem[j]);
    }

    printf("请输入删除元素的位置:");
    scanf("%d",&delpos);
    deletelist(la,delpos);

    printf("删除后的线性表如下:");
    for(j=0;j<la->last;j++)            //输出数据
    {
        printf("%d \n",la->elem[j]);
    }

    printf("输入要查找的元素:");
    scanf("%d",&locval);
    loci = locate(la,locval);
    printf("元素的位置是%d",locval);
}

int insertlist (seqlist *l, int i, int x)    //在线性表中插入数据
{
    int k;

    if(i < 1 || i > l->last + 1)
    {
        printf("插入的位置不合法");
        return(ERROR);
    }

    if(l->last >= maxsize-1)
    {
        printf("线性表已经存满");
    }

    for(k = l->last; k >= i - 1;k--)
    {
        l->elem[k + 1] = l->elem[k];
    }
    l->elem[i-1] = x;
    l->last++;        //不要忘记把last加一
    return(OK);
}

int deletelist(seqlist *l, int i)        //删除元素
{
    int k;
    if(i < 1 || i > l->last + 1)
    {
        printf("删除位置不合法");
        return(ERROR);
    }
    
    for(k = i;k < l->last;k++)
    {
        l->elem[k - 1] = l->elem[k];
    }
    l->last--;
    return(OK);
}

int locate(seqlist *l, int x)        //查找元素
{
    int i;
    int k;
    for(i = 0;i < l->last;i++)
    {
        if(l->elem[i] == x)
        {
            k = i;
        }
        else
        {
            k = 0;
        }
    }
    return k;
}
原文地址:https://www.cnblogs.com/ngnetboy/p/2690178.html