순서 표 의 응용 (링크 중복 요소 삭제)

2547 단어 체인 테이블
데이터 구조 상의 테스트 1: 순서 표 의 응용
Time Limit: 1000MS Memory limit: 65536K
제목 설명
길이 가 n (n < 1000) 인 순서 표 에 같은 값 의 '여분의' 데이터 요소 (형식 은 정형) 가 존재 할 수 있 습 니 다. 프로그램 을 작성 하여 '여분의' 데이터 요 소 를 순서 표 에서 삭제 하고 이 표를 '비 순수한 표' (같은 값 의 요소 가 표 에 여러 개 있 을 수 있 음) 에서 '순수한 표' 로 만 듭 니 다.
입력
첫 번 째 줄 입력 표 의 길이 n;
두 번 째 줄 은 순서 표 에 저 장 된 n 개의 요소 값 을 순서대로 입력 합 니 다.
출력
첫 번 째 줄 출력 이 불필요 한 요 소 를 삭제 한 후 순서 표 의 요소 갯 수;
두 번 째 줄 은 삭 제 된 순서 표 요 소 를 순서대로 출력 합 니 다.
예제 입력
12

5 2 5 3 3 4 2 5 7 5 4 3

예제 출력
5

5 2 3 4 7

#include
#include
typedef struct node
{
    int data;
    struct node *next;
} node;
int main()
{
    int n,a;
    scanf("%d",&n);
    node *p,*q,*head,*tail;
    head=(node*)malloc(sizeof(node));
    head->next=NULL;
    tail=head;
    a=n;
    while (a - -) / / 순서 링크 만 들 기
    {
        p=(node*)malloc(sizeof(node));
        scanf("%d",&p->data);
        tail->next=p;
        tail=p;
    }
    p = (node *) malloc (sizeof (node); / 여 기 는 링크 마지막 에 빈 노드 를 만 들 고 후속 삭제 작업 을 편리 하 게 합 니 다.
    p->next=NULL;
    tail->next=p;
    tail=head->next;
    while (tail - > next! = NULL) / / 첫 번 째 원소 부터 검출
    {
        a=tail->data;
        p=tail;
        q=p->next;
        while (q - > next! = NULL) / / 각 요소 가 현재 요소 와 같 는 지,
        {
            if (q - > data = = a) / / 같 으 면 삭제
            {
                p->next=q->next;
                free(q);
                q=p->next;
                n--;
            }
            else / / 다 르 면 다음 요소 로 넘 어가 서 태그 변 수 를 선후 로 뛰 게 합 니 다.
            {
                p=q;
                q=q->next;
            }
        }
        tail = tail - > next; / 검 측 할 변 수 를 변경 합 니 다.
    }
    printf("%d",n);
    for (tail = head - > next; tail - > next - > next! = NULL; tail = tail - > next) / / 앤 이 인쇄 를 요구 합 니 다.
        printf("%d ",tail->data);
    printf("%d",tail->data);
    return 0;
}
 
코드 를 함께 놓 는 습관 이 있 습 니 다. 한 번 사용 하 는 코드 는 호출 함수 로 매우 번 거 롭 고 파 라 메 터 를 전달 할 때 오류 가 발생 하기 쉽 습 니 다 (개인 습관 과 수준 이 결정 되 고 본인 의 수준 이 확실히 높 지 않 습 니 다). 그래서 같이 쓰 는 습관 이 있 습 니 다.

좋은 웹페이지 즐겨찾기