DoublyLinkedList(양방향 체인 테이블)

3292 단어
원래는 쌍방향 체인 시계를 쓸 줄 몰랐는데 최근에 두 갈래 나무를 배운 후에 갑자기 이것이 쌍방향 체인 시계가 아니라는 것을 깨닫고 두 갈래 나무에 대한 이해를 통해 쌍방향 체인 시계를 실현했다.
코드:
#define SIZE 10

DouLL * head, *n, *p;

head =(DouLL * )malloc(sizeof(DouLL));
p = head;  /* p  */
p->Item = 1;
p->prev = p->next = NULL;
for (int i = 1; i < SIZE; i++)
{
	n =(DouLL * )malloc(sizeof(DouLL));
	n->Item = i + 1;
	n->prev = p;  /*   */
	p->next = n;
	p = p->next;
}
n->next = NULL;    /*  : n -> next = head; */
head->prev = NULL; /* head -> prev = n; */

  code:
// 
#include
#include
#include

#define bool int
#define true 1
#define false 0;

typedef struct douLinkList
{
    struct douLinkList * next;        // 
    struct douLinkList * prev;        // 
    int Item;
}DouLL;

/*   */
bool InsertLL();
/*   */
bool deleteLL();

bool InsertLL(DouLL * h, int X, int i)
{
    DouLL * p;
    int j;
    
    j = 1;
    while(j < i - 1 && h)
    {
        h = h -> next;
        ++ j;
    }
    p = malloc(sizeof(DouLL));
    p -> Item = X;
    p -> prev = h;
    p -> next = h -> next;
    h -> next -> prev = p;
    h -> next = p;
    return true;
}

bool deleteLL(DouLL * h, int X)
{
    DouLL * temp;

    if(!h)
    {
        fprintf(stderr, " !
"); return false; } while(X != h -> Item && h) { h = h -> next; } temp = h; h -> prev -> next = h -> next; h -> next -> prev = h -> prev; free(temp); return true; } int main() { char c; int i, SIZE, X; DouLL * head, * n, * p; puts(" :"); scanf("%d", &SIZE); head = malloc(sizeof(DouLL)); p = head; p -> Item = rand() % 100 + 50; p -> prev = p -> next = NULL; for(i = 1; i < SIZE; i++) { n = malloc(sizeof(DouLL)); n -> Item = rand() % 1000 + 50; n -> prev = p; p -> next = n; p = p -> next; } n -> next = NULL; head -> prev = NULL; puts("1) 2) "); puts("3) 4) "); while(1) { c = getch(); if(c == '1') { puts("Order:"); p = head; while(p) { printf("%d ", p -> Item); p = p -> next; } printf("NULL
"); puts("ReveOrder:"); p = n; while(p) { printf("%d ", p -> Item); p = p -> prev; } printf("NULL
"); } if(c == '2') { printf("
:"); scanf("%d", &X); p = head; deleteLL(p, X); } if(c == '3') { printf("
( ):"); scanf("%d %d", &X, &i); p = head; InsertLL(p, X, i); } if(c == '4') break; } return 0; }

  
다음으로 전송:https://www.cnblogs.com/darkchii/p/7433784.html

좋은 웹페이지 즐겨찾기