선형 표 알고리즘 구현

17533 단어 데이터 구조
1. 두 개의 헤드 노드 가 없 는 단일 체인 시트 가 설치 되 어 있 습 니 다. 헤드 포인터 가 각각 ha. hb. 체인 에 데이터 도 메 인 data 체인 도 메 인 next 가 있 습 니 다. 두 링크 의 데 이 터 는 모두 증가 순서에 따라 저장 되 어 있 습 니 다. 현 재 는 hb 표를 ha 표 에 귀속 시 키 고 합병 한 후에 ha 는 계속 증가 하 는 순 서 를 요구 합 니 다. hb 에 도 있 으 면 hb 중의 데 이 터 를 ha 에 병합 하지 않 고 추가 저장 공간 을 신청 하지 않 으 라 고 요구 합 니 다.merge(hahb);
linklist.h

//

//  Linklist.h

//  Test

//

//  Created by Edong on 2018/10/27.

//  Copyright © 2018 Edong. All rights reserved.

//



#ifndef Linklist_h

#define Linklist_h

#include 

#include 

#endif /* Linklist_h */

typedef int elemtype;

typedef struct node{

    elemtype data;

    struct node* next;

}*linklist;

//       ,       

linklist initlist(int arg[]){

    int lenth=0;

    for (; arg[lenth]!='\0'; lenth++);

    if (lenth==0) return NULL;

    linklist list=(linklist)malloc(sizeof(linklist));

    list->data=arg[0];

    list->next=NULL;

    for (int i=lenth; i>1; i--) {

        linklist p=(linklist)malloc(sizeof(linklist));

        p->data=arg[i-1];

        p->next=list->next;

        list->next=p;

    }

    return list;

}

void printList(linklist L){

    linklist p=L;

    while(p!=NULL){

        printf("%d,",p->data);

        p=p->next;

    }

}



//    

void sortList(linklist a,linklist b){

    int flag=0;

    linklist copyB=b;

    linklist copyA=a;

    linklist copyA2=a;

    while(copyB){

        if(copyA->next==NULL&&(copyB->data)>(copyA->data)){

             copyA->next=copyB;

            break;

        }

        if (copyB->data==copyA->data) {

            copyB=copyB->next;

            continue;

        }

        if (copyB->data<copyA->data) {

            if (flag==0) copyA=copyA->next;

            copyA2->next=copyB;

            copyB=copyB->next;

            copyA2->next->next=copyA;



            if (flag==0){

                elemtype data=copyA2->data;

                copyA2->data=copyA2->next->data;

                copyA2->next->data=data;

                flag=2;

                copyA=copyA2->next;

                continue;

            }

             copyA2=copyA2->next;



            continue;

        }

        if(copyB->data>copyA->data){

            copyA=copyA->next;

            if (flag!=0)copyA2=copyA2->next;

            else flag=1;

            }

        }

    }


main.c

#include 

#include "Linklist.h"

#define MAXSIZE 30



int main(int argc, const char * argv[]) {

    int a[MAXSIZE]={1,3,5,7};

    int b[MAXSIZE]={2,4,6,8,10} ;

    linklist al=initlist(a);

    linklist bl=initlist(b);

    printf("
a :"
); printList(al); printf("
b :"
); printList(bl); printf("
b、a :"
); sortList(al, bl); printList(al); printf("
"
); return 0; }

좋은 웹페이지 즐겨찾기