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

  ①:在线性表中插入数据

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;

}

你可能感兴趣的:(数据结构)