两个顺序表的收尾连接,连接后无序。

两个线性表的连接,例如第一个是1 3 4 5,第二个为4 5 6 7,连接后为1 3 4 5 4 5 6 7。怎么做啊,需要代码

顺序表和单链表

#include<stdio.h>


//顺序表
typedef struct OderList
{
    int data;
}List;

void MergeList(int* list1, int n1, int* list2, int n2, List* list, int n)
{
    int i = 0;
    int j = 0;
    for (; i < n1; i++)
    {
        (list + i)->data = list1[i];
    }
    for (; i < n; i++, j++)
    {
        list[i].data = list2[j];
    }
}

//展示链表
ShowList(List* list, int x)
{
    int i = 0;
    for (; i < x; i++)
    {
        printf("%d ", list[i].data);
    }
    printf("\n");
}

//初始化
void InitList(List* list, int x)
{
    int i = 0;
    printf("输入%d个数据:\n",x);
    for (; i < x; i++)
    {
        scanf("%d", &list[i].data);
    }
}

int main()
{
    int n1 = 0;
    printf("输入第一个顺序表的长度:>");
    scanf("%d", &n1);
    List* list1 = (List*)malloc(sizeof(List*) * n1);
    InitList(list1, n1);//初始化

    int n2 = 0;
    printf("输入第二个顺序表的长度:>");
    scanf("%d", &n2);
    List* list2 = (List*)malloc(sizeof(List*) * n2);
    InitList(list2, n2);//初始化

    //合并后的顺序表长
    int n = n1+n2;
    List* list = (List*)malloc(sizeof(List*) * n);



    //合并
    MergeList(list1, n1, list2, n2, list, n);
    printf("合并后:\n");
    ShowList(list, n);

    free(list);
    free(list1);
    free(list2);
    list2 = NULL;
    list1 = NULL;
    list = NULL;

    return 0;
}


img

单链表

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node* next;
}Node_t;


Node_t* AollcNode(int x)
{
    Node_t* new = (Node_t*)malloc(sizeof(Node_t));//新建一个节点
    //初始化
    new->data = x;
    new->next = NULL;
    return new;
}

//插入数据
void InintList(Node_t* head, Node_t** end)
{
    int i = 0;
    int x = 0;
    Node_t* p = NULL;
    printf("输入链表长度:>");
    int n = 0;
    scanf("%d", &n);
    for (; i < n; i++)
    {
        scanf("%d", &x);
        p = AollcNode(x);
        (*end)->next = p;
        *end = p;
    }
}

void MergeList(Node_t* head, Node_t* head1, Node_t* head2)
{
    Node_t* p = head;
    Node_t* p1 = head1->next;//指向第一个节点
    Node_t* p2 = head2->next;//指向第一个节点
    while (p1)
    {
            p->next = p1;
            p = p1;
            p1 = p1->next;
    }
    while (p2)
    {
        p->next = p2;
        p = p2;
        p2 = p2->next;
    }

}

void ShowNode(Node_t* head)
{
    Node_t* p = head->next;
    while (p)
    {
        printf("%d->", p->data);
        p = p->next;
    }
    printf("NULL\n");
}

int main()
{
    Node_t* head1 = AollcNode(0);
    Node_t* head2 = AollcNode(0);
    Node_t* head3 = AollcNode(0);//合并后的tou
    printf("初始化链表1\n");
    Node_t* end1 = head1;
    InintList(head1, &end1);
    ShowNode(head1);

    printf("初始化链表2\n");
    Node_t* end2 = head2;
    InintList(head2, &end2);
    ShowNode(head2);

    printf("合并后:>");
    MergeList(head3, head1, head2);
    ShowNode(head3);

    free(head1);
    free(head2);
    free(head3);
    head1 = NULL;
    head2 = NULL;
    head3 = NULL;


    return 0;
}


img

把第一个中的5的后继节点记为第二个的4,把第二个的4的前驱节点记为第一个的5
望采纳

看错了,你这是顺序表。

typedef struct _seqlist
{
    int data[100];
    int len;
}seqlist;

int main()
{
   seqlist s1,s2;
   s1.len = s2.len = 0;
   for(int i=0;i<s2.len;i++)
   {
        s1.data[len++] = s2.data[i];  
   }
}