线性表中数组的实现

#include<stdio.h>
#define maxn 110000
struct Node
{
    int Data[maxn];
    int last;
};
typedef struct Node* LNode;
//初始化
LNode Creat()
{
    LNode lis;
    lis=(LNode)malloc(sizeof(struct Node));
    lis->last=-1;
    return lis;
}

//在第i个位置插入k
//因为本身就是一个指针,所以不用取地址
void charu(LNode List,int i,int k)
{
    int pos;
    if(i<1)
    {
        printf("插入的位置不合法\n");
        return ;
    }
    if(List->last>=maxn)
    {
        printf("空间已满\n");
        return ;
    }
    for(pos=List->last;pos>i;pos--)
        List->Data[pos+1]=List->Data[pos];
    List->Data[i-1]=k;
    List->last++;
}

//输出List所有值
void print(LNode List)
{
    int i;
    for(int i=0;i<=List->last;i++)
        printf("%d ",List->Data[i]);
    printf("\n");
}

//删除位置为k-1的值
void shanchu(LNode List,int k)
{
    int pos;
    if(k<1)
    {
        printf("删除的位置不合法\n");
        return ;
    }
    if(k>List->last+1)
    {
        printf("删除元素无效\n");
        return ;
    }
    for(pos=k;pos<=List->last;pos++)
    {
        List->Data[pos-1]=List->Data[pos];
    }
    List->last--;
}

//寻找元素为k的位置
int Find(LNode List,int k)
{
    int i=0;
    for(i=0;i<=List->last;i++)
        if(List->Data[i]==k)
            return i+1;
    return 0;
}

int main()
{
    int k;
    LNode List;
    List=Creat();
    int length,del,find;
    scanf("%d",&length);
    printf("插入:");
    for(int i=0;i<length;i++)
    {
        scanf("%d",&k);
        charu(List,i+1,k);
    }
    print(List);
    printf("删除:");
    scanf("%d",&del);
    shanchu(List,del);
    print(List);
    printf("查找:");
    scanf("%d",&find);
    if(Find(List,find))
        printf("%d\n",Find(List,find));
    else
        printf("没有找到\n");
    return 0;
}

 

posted @ 2021-03-28 10:24  Joelin12  阅读(54)  评论(0)    收藏  举报