两个线性表的连接,例如第一个是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;
}
单链表
#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;
}
把第一个中的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];
}
}