제1장 제2 절 연습 문제 20 연결 두 순환 단일 체인 표
4109 단어 데이터 구조알고리즘선형 표순환 싱글 체인 테이블
두 개의 순환 싱글 체인 시트 가 있 습 니 다. 링크 헤드 포인 터 는 각각 h1 과 h2 입 니 다. 하나의 함 수 를 작성 하여 링크 h2 를 링크 h1 에 연결 한 후에 링크 뒤의 링크 는 순환 링크 형식 을 유지 하도록 요구 합 니 다.
알고리즘 사상
이것 은 두 개의 순환 단일 체인 표 이기 때문에 그것들 을 연결 하여 새로운 순환 단일 체인 표를 형성 하 는 것 만 고려 하면 된다.그러면 우 리 는 먼저 첫 번 째 순환 단일 체인 표 h1 의 끝 점 을 찾 은 다음 에 next 도 메 인 이 다른 순환 단일 체인 표 h2 의 첫 번 째 데이터 도 메 인 을 가 진 결점 (즉, 머리 노드 의 next 도 메 인 이 가리 키 는 그 결점) 을 가리 키 게 한다. 이때 순환 단일 체인 표 h2 의 머리 노드 를 방출 할 수 있다.마지막 으로 순환 싱글 체인 표 h2 의 끝 점 을 찾 아 next 도 메 인 으로 하여 금 순환 싱글 체인 표 h1 의 두 절 점 을 다시 가리 키 게 하면 됩 니 다.이렇게 해서 두 개의 순환 단일 체인 표를 연결 시 켜 하나의 순환 단일 체인 표를 형성 했다.
알고리즘 설명
// “ ”
LNode* FindRear(LNode *head)
{
LNode *p=head->next;
while(p->next!=head){
p=p->next;
}
return p;
}
//
LinkList Connect(LNode *head1, LNode *head2)
{
LNode *r1=FindRear(head1);
LNode *r2=FindRear(head2);
LNode *p=head2->next;
r1->next=p;
free(head2);
r2->next=head1;
return head1;
}
구체 적 인 코드 는 첨부 파일 참조.
첨부 파일
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreatList(LNode*);
LinkList Connect(LNode*, LNode*);
LNode* FindRear(LNode*);
void Print(LNode*);
int main(int argc,char* argv[])
{
LNode *head1;
head1=(LNode*)malloc(sizeof(LNode));
head1=CreatList(head1);
LNode *head2;
head2=(LNode*)malloc(sizeof(LNode));
head2=CreatList(head2);
Print(head1);
Print(head2);
head1=Connect(head1, head2);
Print(head1);
return 0;
}
//
LinkList CreatList(LNode *head)
{
LNode *L;
LNode *r=head;
ElemType x;
scanf("%d",&x);
while(x!=999){
L=(LNode*)malloc(sizeof(LNode));
L->data=x;
r->next=L;
r=L;
scanf("%d",&x);
}
r->next=head;
return head;
}
//
LinkList Connect(LNode *head1, LNode *head2)
{
LNode *r1=FindRear(head1);
LNode *r2=FindRear(head2);
LNode *p=head2->next;
r1->next=p;
free(head2);
r2->next=head1;
return head1;
}
//
LNode* FindRear(LNode *head)
{
LNode *p=head->next;
while(p->next!=head){
p=p->next;
}
return p;
}
//
void Print(LNode *head)
{
LNode *p=head->next;
while(p!=head){
printf("%4d",p->data);
p=p->next;
}
printf("
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.