doublelink.c
来自「自己做的常用库和实现的数据结构。public domain.」· C语言 代码 · 共 103 行
C
103 行
/* Demo of simple double link manipulation. * * Written by Cyril Hu (cyrilhu@gmail.com), public domain. */#include<stdio.h>#include<stdlib.h>#define MAX_LEN 10#define MEM(X) if( ((X)=(A *)malloc(sizeof(A))) == NULL) { \ fprintf(stderr, "Fatal: MEM alloc fail"); \ exit(EXIT_FAILURE); \ }typedef struct a { int sn; struct a *prev; struct a *next;} A;static A *rev(A *head, int n){ A *t, *p; int i,j; for(p=head,i=0; i < n/2; i++,p = p->next) { for(j=1,t=head; j < n-i; j++) { t = t->next; } j = p->sn; p->sn = t->sn; t->sn = j; } return head;}int main(void){ A a, *head, *tail, *t, *p; int i; for(p=&a,i=0; i<MAX_LEN; i++) { MEM(p->next) p = p->next; p->sn = i; } p->next = NULL; puts("original link"); for(p=a.next; p != NULL; p = p->next) { printf("%d ", p->sn); } puts("\nlink reversed"); head = rev(a.next, MAX_LEN); for(p=head; p != NULL; p = p->next) { printf("%d ", p->sn); } puts("\nreversed again"); head = rev(head, MAX_LEN); for(p=head; p != NULL; p = p->next) { printf("%d ", p->sn); } for(i=0; i<MAX_LEN; i++) { MEM(p) p->sn = i+10; if(i == 0) { head = t = p; p->prev = NULL; } else { t->next = p; p->prev = t; t = p; } } tail = p; p->next = NULL; puts("\n\nprint new original link from head to tail"); for(p=head; p != NULL; p = p->next) { printf("%d ", p->sn); } puts("\nprint from tail to head"); for(p=tail; p != NULL; p = p->prev) { printf("%d ", p->sn); } puts("\nlink reversed, print from head to tail"); head = rev(head, MAX_LEN); for(p=head; p != NULL; p = p->next) { printf("%d ", p->sn); } puts("\nreversed again, print from tail to head"); head = rev(head, MAX_LEN); for(p=tail; p != NULL; p = p->prev) { printf("%d ", p->sn); } puts(""); return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?