데이터 구조 실험의 링크 9: 양 방향 링크

데이터 구조 실험의 링크 9: 양 방향 링크
Time Limit: 1000MS Memory limit: 65536K
제목 설명
단 방향 체인 시 계 를 배 웠 습 니 다. 우 리 는 문 제 를 해결 하 는 능력 이 하나 더 생 겼 습 니 다. 단일 체인 시 계 는 하나의 지침 을 이용 하여 메모리 에서 다음 위 치 를 찾 을 수 있 습 니 다. 이것 은 쉽게 끊 어 지지 않 는 체인 입 니 다.그러나 단일 체인 시 계 는 되 돌 릴 수 없 는 약점 이 있다.예 를 들 어 링크 에 두 개의 노드 A, B 가 있 는데 그들의 관 계 는 B 가 A 의 후계 이다. A 가 B 를 가리 키 면 A 를 통 해 B 를 쉽게 찾 을 수 있 지만 B 에서 A 를 찾 을 수 없다.간단 한 생각 으로 이 문 제 를 쉽게 해결 할 수 있다. 양 방향 링크 를 만 드 는 것 이다.양 방향 링크 에서 A 는 노드 B 를 가리 키 는 지침 이 있 고 B 는 A 를 가리 키 는 지침 이 있다.이렇게 하면 체인 헤더 노드 의 위치 에서 전체 링크 의 모든 노드 를 옮 길 수 있 을 뿐만 아니 라 링크 의 끝 노드 부터 모든 노드 를 옮 길 수 있다.주어진 열 데이터 에 대해 주어진 순서에 따라 양 방향 링크 를 만 들 고 키워드 에 따라 해당 하 는 노드 를 찾 아 이 노드 의 전구 노드 키워드 와 후계 노드 키 워드 를 출력 합 니 다.
입력
첫 번 째 줄 의 두 개의 정수 n (노드 개 수 를 대표 함), m (찾 으 려 는 키 의 개 수 를 대표 함).두 번 째 줄 은 n 개 수 (n 개 수 는 중복 되 지 않 음) 로 이 n 개 수 를 이용 하여 양 방향 링크 를 만 듭 니 다.다음은 m 개의 키워드 가 있 습 니 다. 한 줄 씩 차지 합 니 다.
출력
주어진 모든 키워드 에 대해 이 키워드 의 전구 노드 키워드 와 후계 노드 키 워드 를 출력 합 니 다.주어진 키워드 가 전구 나 후계 가 없 으 면 출력 하지 않 습 니 다.메모: 주어진 키워드 마다 출력 이 한 줄 을 차지 합 니 다.           한 줄 의 출력 데이터 사이 에 빈 칸 이 있 습 니 다. 줄 의 첫 번 째, 줄 의 끝 에 빈 칸 이 없습니다.
 
예제 입력
10 31 2 3 4 5 6 7 8 9 0
3
5
0

예제 출력
2 4
4 6
9

제시 하 다.
#include
#include

typedef struct node {
    int data;
    struct node *prior,*next;
}Node;

Node *creatList(int n){ //        
    Node *head,*p,*tail;
    int i;
    head=(Node *)malloc(sizeof(Node ));
    head->prior=NULL;
    head->next=NULL;
    tail=head;
    for(i=0;idata);
        tail->next=p;
        p->prior=tail;
        p->next=NULL;
        tail=p;
    }
    return head;
}

void main()
{
    int m,n,i,x;
    Node *head,*r;
    scanf("%d",&n);
    scanf("%d",&m);
    head=creatList(n);
    for(i=0;inext;
        scanf("%d",&x);
        while(r)
        {
            if(r->data==x)
                break;
            r=r->next;
        }
        if(r->prior==head||r->next==NULL)//          
        {
            if(r->prior==head&&r->next!=NULL)//                ,       
            {
                printf("%d
",r->next->data);// } else if(r->prior!=head&&r->next==NULL)// , { printf("%d
",r->prior->data);// } else { } } else { printf("%d %d
",r->prior->data,r->next->data); } } }

좋은 웹페이지 즐겨찾기