At first, i prepared to go through 《the introduction to algorithm》 ,however , i found some part of the book is difficult to understand; what’s more , i can’t borrow the book in the library. Then i found another book, 《algorithm in C》,which reveal most basic idea of some classical algorithm, so i decide to read this book firstly.
example 1:josephus funciton
#include<stdlib.h> #include<stdio.h> typedef struct node* link; struct node { int item; link next; }; int main(int argc,char *argv[]) { int i, N, M; scanf("%d%d",&N,&M); node *t = new node,*x; x = t; t->item = 1; t->next = t; for (i = 2; i <= N; i++) { x->next = new node; x = x->next; x->item = i; x->next = t; } while (x != x->next) { for (i = 1; i < M; i++) { x = x->next; } x->next = x->next->next; N--; } printf("%d ",x->item); }
example2: reverse link list
#include<stdlib.h> #include<stdio.h> typedef struct node* link; struct node { int item; link next; node() { next = NULL; } }; link reverse(link x) { /* 将y后节点的指针保存在t中,然后将y的链接指向r,再使r移到y,y移到t */ link t, y = x, r = NULL; while (y != NULL) { t = y->next; y->next = r; r = y; y = t; } return r; } int main(int argc,char *argv[]) { int i, N, M; scanf("%d%d",&N,&M); node *t = new node,*x,*head; x = t; head = t; t->item = 1; t->next = t; for (i = 2; i <= N; i++) { x->next = new node; x = x->next; x->item = i; } node *newhead = reverse(head); while (newhead != NULL) { printf("%d ",newhead->item); newhead = newhead->next; } }