#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
struct node
{ int num;
char name[20];
struct node * next;
};
{ int num;
char name[20];
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
typedef struct node * Link;
void all_malloc_ok (Link new_node)
{
if (new_node == NULL)
{
printf("Fail!");
exit(-1);
}
{
if (new_node == NULL)
{
printf("Fail!");
exit(-1);
}
}
Link creat_new_node(Link *new_node)
{
*new_node = (Link)malloc(sizeof(Node));
Link creat_new_node(Link *new_node)
{
*new_node = (Link)malloc(sizeof(Node));
all_malloc_ok (*new_node);
}
void creat_link (Link * head)
{
*head = creat_new_node(head);
(*head)->next = *head;
}
void display (Link head)
{
Link p;
p = head->next;
{
*head = creat_new_node(head);
(*head)->next = *head;
}
void display (Link head)
{
Link p;
p = head->next;
if ( p == head)
{
printf("The link is empty!");
return ;
}
{
printf("The link is empty!");
return ;
}
while (p != head)
{
printf("%4d:",p->num);
printf("%s\n",p->name);
p = p -> next;
}
}
void insert_new_node_tail (Link head, Link new_node)
{
Link p;
p = head;
while (p->next != head)
{
p = p->next;
}
{
printf("%4d:",p->num);
printf("%s\n",p->name);
p = p -> next;
}
}
void insert_new_node_tail (Link head, Link new_node)
{
Link p;
p = head;
while (p->next != head)
{
p = p->next;
}
new_node->next = head;
p->next = new_node;
}
void insert_new_node_head (Link head, Link new_node)
{
Link p;
p = head;
new_node->next = p->next;
p->next = new_node;
}
p->next = new_node;
}
void insert_new_node_head (Link head, Link new_node)
{
Link p;
p = head;
new_node->next = p->next;
p->next = new_node;
}
void release (Link *head)
{
Link p;
p = *head;
if(p == NULL)
{
return;
}
if (p->next = *head)
{
free(p);
return ;
}
while(p->next != *head)
{
p = p->next;
}
p->next = NULL;
{
return;
}
if (p->next = *head)
{
free(p);
return ;
}
while(p->next != *head)
{
p = p->next;
}
p->next = NULL;
while (*head != NULL)
{
p = *head;
*head = (*head) -> next;
free (p);
}
}
{
p = *head;
*head = (*head) -> next;
free (p);
}
}
int count (Link head)
{
Link p;
p = head;
int n = 0;
while ( p->next != head)
{
p = p->next;
n++;
}
return n;
}
{
Link p;
p = head;
int n = 0;
while ( p->next != head)
{
p = p->next;
n++;
}
return n;
}
Link search (Link head,int n)
{
Link p;
p = head->next;
while (p != head)
{
if ( p->num == n)
{
break;
}
p = p->next;
}
return p;
}
Link search_before (Link head,int n)
{
Link p;
p = head->next;
Link q;
q = head;
while (p != head)
{
if( p->num == n)
{
break;
}
q = p;
p = p->next;
}
return q;
}
/*void modifier (Linak p)
{
scanf("%s",p->name);
printf("\n");
}*/
{
Link p;
p = head->next;
while (p != head)
{
if ( p->num == n)
{
break;
}
p = p->next;
}
return p;
}
Link search_before (Link head,int n)
{
Link p;
p = head->next;
Link q;
q = head;
while (p != head)
{
if( p->num == n)
{
break;
}
q = p;
p = p->next;
}
return q;
}
/*void modifier (Linak p)
{
scanf("%s",p->name);
printf("\n");
}*/
void delete1 (Link head, int n)
{
Link p ;
p = search (head,n);
if(p == head)
{
printf("没有这个值");
}
else if ((p->next) == head)
{
search_before(head,n)->next = head;
free(p);
}
else
{
( search_before(head,n))->next = p ->next;
free (p);
}
}
void plus_node (Link head, int n)
{
Link p;
Link new_node;
{
Link p ;
p = search (head,n);
if(p == head)
{
printf("没有这个值");
}
else if ((p->next) == head)
{
search_before(head,n)->next = head;
free(p);
}
else
{
( search_before(head,n))->next = p ->next;
free (p);
}
}
void plus_node (Link head, int n)
{
Link p;
Link new_node;
creat_new_node(&new_node);
new_node->num = 7;
printf("输入新结点的名字");
scanf("%s",new_node->name);
new_node->num = 7;
printf("输入新结点的名字");
scanf("%s",new_node->name);
p = search(head,n);
if (p == head)
{
printf("Fail!");
}
else
{
search_before(head,n)->next = new_node;
new_node->next = p;
}
}
if (p == head)
{
printf("Fail!");
}
else
{
search_before(head,n)->next = new_node;
new_node->next = p;
}
}
void inverted_order (Link head)
{
Link p1 = NULL;
p1 = head->next;
Link p2 = NULL;
Link p3 = NULL;
if (p1 == head)
{
printf("Fail!\n");
}
else if (p1->next == head)
{
printf("There is only one node.\n");
}
else if ((p1->next)->next == head)
{
p2 = p1->next;
p2->next = p1;
p1->next = head;
head->next = p2;
}
else
{
p2 = p1->next;
p3 = p2->next;
p1->next = head;
while (p3 != head)
{
p2->next = p1;
// printf("*");
// p3->next = p2;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p2->next = p1;
head->next = p2;
}
{
Link p1 = NULL;
p1 = head->next;
Link p2 = NULL;
Link p3 = NULL;
if (p1 == head)
{
printf("Fail!\n");
}
else if (p1->next == head)
{
printf("There is only one node.\n");
}
else if ((p1->next)->next == head)
{
p2 = p1->next;
p2->next = p1;
p1->next = head;
head->next = p2;
}
else
{
p2 = p1->next;
p3 = p2->next;
p1->next = head;
while (p3 != head)
{
p2->next = p1;
// printf("*");
// p3->next = p2;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p2->next = p1;
head->next = p2;
}
}
void insert_sort(Link head, Link new_node)
{
Link p;
p = head->next;
int number = new_node->num;
if (p == head)
{
head->next = new_node;
new_node->next = head;
}
else if (number <= (p->num))
{
new_node->next = p;
p = new_node;
}
else if (number > (p->num))
{
while (p != head)
{
if (p->next == head)
{
p->next = new_node;
new_node->next = head;
break;
}
else if (number <= ((p->next)->num))
{
new_node->next = p->next;
p->next = new_node;
break;
}
else if (number > ((p->next)->num))
{
p = p->next;
}
}
}
}
int main ()
{
Link head = NULL;
Link new_node = NULL;
int i;
int n;
creat_link(&head);
void insert_sort(Link head, Link new_node)
{
Link p;
p = head->next;
int number = new_node->num;
if (p == head)
{
head->next = new_node;
new_node->next = head;
}
else if (number <= (p->num))
{
new_node->next = p;
p = new_node;
}
else if (number > (p->num))
{
while (p != head)
{
if (p->next == head)
{
p->next = new_node;
new_node->next = head;
break;
}
else if (number <= ((p->next)->num))
{
new_node->next = p->next;
p->next = new_node;
break;
}
else if (number > ((p->next)->num))
{
p = p->next;
}
}
}
}
int main ()
{
Link head = NULL;
Link new_node = NULL;
int i;
int n;
creat_link(&head);
for (i = 1; i < 3; i++)
{
creat_new_node (&new_node);
printf("输入第%d个名字:",i);
scanf("%s",new_node->name);
new_node->num = i;
insert_new_node_tail (head, new_node);
}
display (head);
printf("有%d个结点.\n",count(head));
printf("输入结点中成员num的值(查找名字):");
scanf("%d",&n);
if (search(head,n) == head)
printf("没有这个数。");
else
printf("%d : %s\n",n, search(head,n)->name);
printf("输入需要删除的成员num的值:");
scanf("%d",&n);
delete1 (head,n);
display (head);
printf("输入一个值,加入一个结点:");
scanf("%d",&n);
plus_node(head,n);
display(head);
inverted_order (head);
{
creat_new_node (&new_node);
printf("输入第%d个名字:",i);
scanf("%s",new_node->name);
new_node->num = i;
insert_new_node_tail (head, new_node);
}
display (head);
printf("有%d个结点.\n",count(head));
printf("输入结点中成员num的值(查找名字):");
scanf("%d",&n);
if (search(head,n) == head)
printf("没有这个数。");
else
printf("%d : %s\n",n, search(head,n)->name);
printf("输入需要删除的成员num的值:");
scanf("%d",&n);
delete1 (head,n);
display (head);
printf("输入一个值,加入一个结点:");
scanf("%d",&n);
plus_node(head,n);
display(head);
inverted_order (head);
display (head);
for (i = 0; i < 3; i++)
{
new_node = creat_new_node(&new_node);
printf("输入插入的第%d个结点的num的值:\n",i + 1);
scanf("%d",&new_node->num);
printf("输入插入的第%d个结点的name的值:\n",i + 1);
scanf("%s",new_node->name);
insert_sort(head,new_node);
}
display(head);
release(&head);
display (head);
for (i = 0; i < 3; i++)
{
new_node = creat_new_node(&new_node);
printf("输入插入的第%d个结点的num的值:\n",i + 1);
scanf("%d",&new_node->num);
printf("输入插入的第%d个结点的name的值:\n",i + 1);
scanf("%s",new_node->name);
insert_sort(head,new_node);
}
display(head);
release(&head);
display (head);
return 0;
}
}