집 >백엔드 개발 >C#.Net 튜토리얼 >C 언어는 두 개의 순서 연결 목록 병합을 구현합니다(코드 예).
이 글에서는 c 언어를 사용하여 순서가 지정된 두 개의 연결 목록을 병합하는 방법을 코드 예제를 통해 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
추천 튜토리얼: "c 언어 튜토리얼 비디오"
C 언어는 두 개의 순서 연결 목록 병합을 구현합니다.
순서가 두 개인 단일 연결 목록이 있으며 두 개는 코드를 통해 결합됩니다. 단일 연결 목록을 순서가 지정된 새 테이블로 병합하려면 이전 테이블의 공간을 사용해야 하며 메모리를 새로 할당할 수 없습니다
#include <stdio.h>#include <stdlib.h>typedef struct List{ int a; struct List *next;}list;void newList(list *l){ //初始化头节点 l->next = NULL;}void setList(list * l){ //建立链表 int i = 1; int j; while (i) { scanf_s("%d", &j); if (j == -1) { i = 0; } else { list *l1 = (list *)malloc(sizeof(list));//为新的结点分派内存 l1->a = j;//储存数据 /* 将最后结点的next区域指向新结点 将新结点的next区域指向设置为空 */ l->next = l1; l1->next = NULL; l = l->next; } }}void printfList(list *l){ printf("该链表内容为:\n"); while (l->next) { printf("%d\t", l->next->a); l = l->next; } printf("\n");}list *add(list *LA, list *LB){ //记录两个链表的头结点 list *la=LA; list *l = LA; list *lb = LB; //移动指针 LA = LA->next; LB = LB->next; la->next = NULL; while (LA!=NULL&&LB!=NULL) { /* 将两个结点的数据进行比较,数据较小的结点接在头结点后面, */ if (LA->a < LB->a) { la->next = LA; la = LA; LA = LA->next; } else { la->next = LB; la = LB; LB = LB->next; } } //若其中一个链表的结点已经全接在新表中则将另一个链表的剩余结点接在新表的后面 if (LA) { la->next = LA; } if(LB) { la->next = LB; } free(lb); return l;}int main(){ //为结点分配内存 list *LA = (list *)malloc(sizeof(list)); list *LB = (list *)malloc(sizeof(list)); //初始化结点 newList(LA); newList(LB); //建立链表 setList(LA); setList(LB); //输出链表的内容 printf("LA的数据:\n"); printfList(LA); printf("LB的数据:\n"); printfList(LB); list *LC = add(LA, LB); //输出合并后的新表 printfList(LC); system("pause"); return 0;}
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !
위 내용은 C 언어는 두 개의 순서 연결 목록 병합을 구현합니다(코드 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!