两个线性表的连接,例如第一个是1 3 4 5,第二个为4 5 6 7,连接后为1 3 4 5 4 5 6 7。怎么做啊,需要代码
3条回答 默认 最新
- 日向晚,声声慢 2022-09-24 14:35关注
顺序表和单链表
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录