整理了下以前的代码,放到这里来,防止又被我格了(上次很多被不小心格了,哭啊!) 。
单链表的一些操作:
//:linkList.c
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
//define a node
typedef struct node...{
int val;
struct node *next;
} node;
//create a link list by tail inserting
void tail_insert(node **h,int i)...{
if (*h == 0)...{
*h = (node*)malloc(sizeof(node));
(*h)->val = i;
(*h)->next = 0;
return;
}
node *p = (node*)malloc(sizeof(node)),*pl = *h;
p->val = i;
p->next = 0;
while (pl->next)
pl = pl->next;
pl->next = p;
return;
}
//create a link list by head inserting
void head_insert(node **h,int i)...{
if (*h == 0)...{
*h = (node*)malloc(sizeof(node));
(*h)->next = 0;
(*h)->val = i;
return;
}
node *p = (node*)malloc(sizeof(node));
p->val = i;
p->next = *h;
*h = p;
return;
}
//reverse a link list by iteration
node* reverse_iteration(node *h)...{
node *nh = h,*p = 0;
h = h->next;
nh->next = 0;
while (h)...{
p = h;
h = h->next;
p->next = nh;
nh = p;
}
return nh;
}
//reverse a link list by recursion
node * reverse_recursion(node *h)...{
if (!h || !h->next)
return h;
node *p = h->next,*r = 0;
r = reverse_recursion(p);
p->next = h;
h->next = 0;
return r;
}
//order link list by using typical algorithm
//insertion sort
node* insertionSortL(node *h)...{
node *sorted = h,*unsorted = sorted->next,
*p1 = 0,*p2 = 0;
while (unsorted)...{
if (unsorted->val < h->val)...{
sorted->next = unsorted->next;
unsorted->next = h;
h = unsorted;
}
else...{
p1 = h;
p2 = p1->next;
while (unsorted->val > p2->val)...{
p1 = p2;
p2 = p2->next;
}
if (p2 != unsorted)...{
sorted->next = unsorted->next;
p1->next = unsorted;
unsorted->next = p2;
}
else
sorted = unsorted;
}
unsorted = sorted->next;
}
return h;
}
//quick sort
node* quickSortL(node *h,node *t)...{
if (h == t)
return h;
node *pl = h,*pr = t,*p1 = h->next,*p2 = 0;
while (p1 != t)...{
p2 = p1;
p1 = p1->next;
if (p2->val < h->val)...{
p2->next = pl;
pl = p2;
}
else...{
p2->next = pr;
pr = p2;
}
}
h->next = quickSortL(pr,t);
return quickSortL(pl,h);
}
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
//define a node
typedef struct node...{
int val;
struct node *next;
} node;
//create a link list by tail inserting
void tail_insert(node **h,int i)...{
if (*h == 0)...{
*h = (node*)malloc(sizeof(node));
(*h)->val = i;
(*h)->next = 0;
return;
}
node *p = (node*)malloc(sizeof(node)),*pl = *h;
p->val = i;
p->next = 0;
while (pl->next)
pl = pl->next;
pl->next = p;
return;
}
//create a link list by head inserting
void head_insert(node **h,int i)...{
if (*h == 0)...{
*h = (node*)malloc(sizeof(node));
(*h)->next = 0;
(*h)->val = i;
return;
}
node *p = (node*)malloc(sizeof(node));
p->val = i;
p->next = *h;
*h = p;
return;
}
//reverse a link list by iteration
node* reverse_iteration(node *h)...{
node *nh = h,*p = 0;
h = h->next;
nh->next = 0;
while (h)...{
p = h;
h = h->next;
p->next = nh;
nh = p;
}
return nh;
}
//reverse a link list by recursion
node * reverse_recursion(node *h)...{
if (!h || !h->next)
return h;
node *p = h->next,*r = 0;
r = reverse_recursion(p);
p->next = h;
h->next = 0;
return r;
}
//order link list by using typical algorithm
//insertion sort
node* insertionSortL(node *h)...{
node *sorted = h,*unsorted = sorted->next,
*p1 = 0,*p2 = 0;
while (unsorted)...{
if (unsorted->val < h->val)...{
sorted->next = unsorted->next;
unsorted->next = h;
h = unsorted;
}
else...{
p1 = h;
p2 = p1->next;
while (unsorted->val > p2->val)...{
p1 = p2;
p2 = p2->next;
}
if (p2 != unsorted)...{
sorted->next = unsorted->next;
p1->next = unsorted;
unsorted->next = p2;
}
else
sorted = unsorted;
}
unsorted = sorted->next;
}
return h;
}
//quick sort
node* quickSortL(node *h,node *t)...{
if (h == t)
return h;
node *pl = h,*pr = t,*p1 = h->next,*p2 = 0;
while (p1 != t)...{
p2 = p1;
p1 = p1->next;
if (p2->val < h->val)...{
p2->next = pl;
pl = p2;
}
else...{
p2->next = pr;
pr = p2;
}
}
h->next = quickSortL(pr,t);
return quickSortL(pl,h);
}