顺序表的实现,c或c++都行

求求大佬了,上课没好好听

img

这个满足你的需求

代码及运行结果如下,如有帮助,请帮忙采纳一下,谢谢。

img

代码:

#include <stdio.h>
#define LIST_INIT_SIZE 20
struct LinkList 
{
    int arr[LIST_INIT_SIZE];
    int length;
};

//创建链表
void CreateList(struct LinkList *lst)
{
    int i,n,m;
    lst->length = 0;
    printf("请输入链表中数据的个数(<=%d):",LIST_INIT_SIZE);
    scanf("%d",&m);
    printf("请输入%d个元素存入数组中",m);
    for (i=0;i<m;i++)
    {
        scanf("%d",&n);
        lst->arr[lst->length] = n;
        lst->length++;
    }
}

//查找第一个满足条件的元素
int FindFirstEle(struct LinkList *lst,int data)
{
    int i;
    for (i=0;i<lst->length;i++)
    {
        if (lst->arr[i] == data)
        {
            return (i+1);
        }
    }
    return 0;
}

//在i位置插入新元素
int InsertEle(struct LinkList *lst,int i,int e)
{
    int j;
    if(i<=0)
        printf("位置必须是大于0的数\n");
    else if(i >lst->length)
        printf("插入位置超过了当前元素的数量%d",lst->length);
    else
    {
        for (j = lst->length;j>=i;j--)
        {
            lst->arr[j] = lst->arr[j-1];
        }
        lst->arr[i-1] = e;
        printf("插入成功\n");
    }
    return 0;
}





//从链表中删除元素(i是下标,从0开始)
void DeleteEle(struct LinkList *lst,int i)
{
    int j;
    if(i<=0)
        printf("下标必须大于0\n");
    else if(i>= lst->length)
        printf("下标太大,数组中这个位置没有数据\n");
    else
    {
        i = i-1;
        for(j = i;j<lst->length -1;j++)
            lst->arr[j] = lst->arr[j+1];

        lst->length--;//长度减1
        printf("删除成功\n");
    }
}

//显示列表
void printList(struct LinkList *lst)
{
    int i;
    printf("链表当前元素为:");
    for (i=0;i<lst->length;i++)
    {
        if(i<lst->length-1)
            printf("%d ",lst->arr[i]);
        else
            printf("%d\n",lst->arr[i]);
    }
}

//排序
void SortList(struct LinkList* lst)
{
    int i,j,t;
    for (i=0;i<lst->length -1;i++)
    {
        for (j=0;j<lst->length -1-i;j++)
        {
            if(lst->arr[j] > lst->arr[j+1])
            {
                t = lst->arr[j];
                lst->arr[j] = lst->arr[j+1];
                lst->arr[j+1] = t;
            }
        }
    }
}



//合并列表
void Merge(struct LinkList* a,struct LinkList* b,struct LinkList* c)
{
    int i,j,index=0;

    SortList(a);
    SortList(b);


    for (i=0,j=0;i<a->length || j<b->length;)
    {
        if(i<a->length && j<b->length)
        {
            if(a->arr[i] <= b->arr[j])
                c->arr[index++] = a->arr[i++];
            else
                c->arr[index++] = b->arr[j++];
        }else if (i >= a->length && j<b->length)
        {
            c->arr[index++] = b->arr[j++];
        }else if (i < a->length && j >= b->length)
        {
            c->arr[index++] = a->arr[i++];
        }
    }
    c->length = a->length + b->length;
    printf("合并完成\n");
}





int main()
{
    struct LinkList a;
    struct LinkList b;
    struct LinkList c;
    int i,data;
    printf("创建表A:");
    CreateList(&a);    
    printList(&a);
    

    printf("请输入要查找的元素:");
    scanf("%d",&data);
    i = FindFirstEle(&a,data);
    printf("位置:%d\n",i); //i=0表示没找到


    printf("请输入要插入的元素位序和元素值:");
    scanf("%d %d",&i,&data);
    InsertEle(&a,i,data);
    printf("插入元素后,");
    printList(&a);

    printf("请输入要删除的元素下标(最小是1):");
    scanf("%d",&i);
    DeleteEle(&a,i);
    printf("删除元素后,");
    printList(&a);

    printf("创建表B:");
    CreateList(&b);
    Merge(&a,&b,&c);
    printf("合并后的");
    printList(&c);
    return 0;
}