1161

来源:互联网 发布:淘宝网充值平台网址 编辑:程序博客网 时间:2024/06/15 12:04
//循环链表
#include <stdio.h>
#include<stdlib.h>
struct node
{
int num;
struct node * next;
};
typedef struct node  Node ;
typedef struct node* Link ;
void create_link(Link * head)
{
*head=NULL;
}
void insert_node_head(Link * head,Link new_node)
{
Link tail=NULL;
tail=*head;
if(*head == NULL)
{
new_node->next=new_node;
*head=new_node;
return;
}
while(tail->next!=*head)
{
tail=tail->next;
}
tail->next =new_node;
new_node->next = *head;
*head = new_node;
}
void insert_node_tail(Link *head,Link new_node)
{
Link temp;
temp=*head;
if(*head==NULL)
{
new_node->next=*head;
*head=new_node;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next =new_node;
new_node->next=NULL;
}
}
void insert_node_mid(Link *head,Link new_node,int num) //中间插入
{
Link p, front,tail;
tail=*head;
p = *head;
if (*head == NULL)
{


new_node->next = *head;
new_node->num = num;
*head = new_node;

}
else
{
front = *head;
p = *head;
while (p != *head && num >= p->num)
{
front = p;
p = p->next;
}
if(p == *head)
{
new_node->next = *head;
tail -> next = new_node;
new_node->num = num;
}
else
{
new_node->num = num;
new_node->next = p;
front->next = new_node;
}
}


/* Link p1 = NULL;
Link p2 = NULL;
p1 = *head;
if(*head = NULL)
{
(*new_node)->next = *head;
*head=*new_node;
}
else
{
while((p1->num < num)&&(p1->next != NULL))
{
p2=p1;
p1=p1 -> next;
}
if((*head)->next == NULL)
{
if(num < p1->num)
{


(*new_node)->next = *head;
*head = *new_node;
}
else
{
(*head)->next = *new_node;
(*new_node)->next = NULL;
}
}
else
{
if( p1 == * head)
{


(*new_node)->next = *head;
*head = *new_node;
}
else
{


if(p1->next != NULL)
{
p2->next = *new_node;


(*new_node)->next =p1;
}
else
{
if(num > p1->num)
{
//p2 = p1->next;
p1->next = *new_node;
(*new_node)->next = NULL;
//(*new_node)->next = p2;
}
else
{
p2->next = *new_node;
(*new_node)->next = p1;
}
}
}


}
}
*/


}
void deleteall(Link *head)
{
Link temp=NULL;
Link p=*head;
if(*head == NULL)
{
printf("link is empty!\n");
return;
}
temp=*head;
while((*head)->next!= p)
{
*head=(*head)->next;
free(temp);
temp=*head;
}
free(temp);
*head=NULL;





}
void revers(Link *head)  //逆序
{
Link p1=NULL;
Link p2=NULL;
Link p3=NULL;
p3=*head;
if(*head == NULL)
{
return;
}
if(p3->next == NULL)
{
return;
}
p2=p3->next;
if(p2->next == NULL)
{
p2->next = p3;
p3->next =NULL;
*head = p2;
return;
}
p1=p2->next;
while(p1->next != NULL)
{
p2->next=p3;
p3=p2;
p2=p1;
p1=p1->next;
}
p2->next=p3;
p1->next = p2;
(*head)->next =NULL;
*head = p1;
return;
}
void display(Link *head)
{
Link temp;
temp=*head;
while(temp==NULL)
{
printf("link is empty!\n");
return;
}
while(temp->next != *head)
{
printf("num=%d\n",temp->num);
temp=temp->next;
}
printf("num=%d\n",temp->num);
}


int main()
{
Link new_node=NULL;
Link head = NULL;
int i,num;
create_link(&head);
for(i=0;i<10;i++)
{
new_node=(Link)malloc(sizeof(Node));
if(new_node==NULL)
{
printf("fault\n");
exit(-1);
}
// scanf("%d\n",&num);
insert_node_mid(&head,new_node,num);
// new_node->num=i;
// insert_node_head(&head,new_node);
// insert_node_tail(&head,new_node);

}
display(&head);
// revers(&head);
// printf("\n");
// deleteall(&head);
// display(&head);


    return 0;
}
0 0
原创粉丝点击