程序代码:
#include <stdio.h>
#include <stdlib.h>
struct node
{
char name[20];
int num;
struct node *next;
};
typedef struct node Node;
typedef struct node * Link;
void creat_link(Link *head)
{
*head = NULL;
}
void creat_new_node(Link* new_node)
{
*new_node = (Link)malloc(sizeof(Node));
if(*new_node == NULL)
{
printf("malloc is error!\n");
exit(-1);
}
}
void insert_node_head(Link *head,Link new_node)
{
new_node->next = *head;
*head = new_node;
}
void insert_node_tail(Link *head,Link new_node)
{
Link p = NULL;
if(*head == NULL)
{
new_node->next = *head;
*head = new_node;
}
else
{
p = *head;
while(p->next != NULL)
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
}
void display_link(Link head)
{
Link p = head;
if(head == NULL)
{
printf("Link is empty!\n");
}
while(p != NULL)
{
printf("%d %s\n",p->num,p->name);
printf("\n");
p = p->next;
}
}
void free_link(Link *head)
{
Link p;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
if(*head == NULL)
{
printf("释放成功!\n");
}
}
int len(Link head)
{
int n = 0;
Link p = head;
while(p->next != NULL)
{
n++;
p = p->next;
}
return n+1;
}
Link search(Link * head,int m)
{
Link p = *head;
if(*head == NULL)
{
printf("the list is empty!\n");
return;
}
while(p != NULL && (p->num) != m)
{
p = p->next;
}
return p;
}
void delete(Link *head,int n)
{
Link p = *head;
Link q = *head;
if(*head == NULL)
{
printf("the list is empty!\n");
}
else if(((*head)->num) == n)
{
*head = (p->next);
free(p);
display_link(*head);
}
else
{
while(p != NULL && (p->num) != n)
{
q = p;
p = p->next;
}
if(p == NULL)
{
printf("no exist!\n");
}
else
{
q->next = (p->next);
free(p);
display_link(*head);
}
}
}
void insert(Link *head,int loc)
{
Link q = *head;
Link p = *head;
Link new_node = NULL;
creat_new_node(&new_node);
printf("enter the number:");
scanf("%d",&(new_node->num));
printf("enter the name:");
scanf("%s",new_node->name);
if(*head == NULL)
{
printf("the list is empty!\n");
}
else if(((*head)->num) == loc)
{
new_node->next = *head;
*head = new_node;
}
else
{
while(p != NULL && (p->num) != loc)
{
q = p;
p = p->next;
}
if(p == NULL)
{
printf("没有这个学号!\n");
}
else
{
q->next = new_node;
new_node->next = p;
}
}
}
void reverse(Link *head)
{
Link p1 = *head;
Link p2;
Link p3;
if(*head == NULL)
{
printf("链表是空的\n");
}
else if((*head)->next == NULL)
{
printf("链表只有一个节点\n");
}
else
{
p2 = p1->next;
p3 = p2->next;
p2->next = p1;
while(p3 != NULL)
{
p1 = p2;
p2 = p3;
p3 = p3->next;
p2->next = p1;
}
(*head)->next = NULL;
*head = p2;
}
}
void insert_sort(Link *head,Link new_node)
{
Link p = *head;
Link q = *head;
if(*head == NULL)
{
*head = new_node;
}
else if((*head)->next == NULL)
{
if((new_node->num) > ((*head)->num))
{
insert_node_tail(head,new_node);
}
else
{
insert_node_head(head,new_node);
}
}
else
{
while(p!= NULL && p->num < (new_node->num))
{
q = p;
p = p->next;
}
if(p == *head)
{
insert_node_head(head,new_node);
}
else
{
new_node->next = p;
q->next = new_node;
}
}
}
int main()
{
int i,t,m,n,d,loc;
Link head = NULL;
Link f = NULL;
creat_link(&head);
Link new_node = NULL;
printf("你想输入几个姓名:");
scanf("%d",&t);
printf("输入学号和姓名:\n");
for(i = 0;i < t;i++)
{
creat_new_node(&new_node);
scanf("%d%s",&(new_node->num),new_node->name);
// insert_node_head(&head,new_node);
// insert_node_tail(&head,new_node);
insert_sort(&head,new_node);
}
/* printf("由小到大排序输出:\n");
display_link(head);
printf("链表长度为 : %d\n",len(head));
printf("输入你想查询的学号:\n");
scanf("%d",&m);
printf("\n");
f = search(&head,m);
if(f != NULL)
{
printf("查询结果是:\n");
printf("%d ",f->num);
printf("%s\n",f->name);
}
else
{
printf("没有这个数!\n");
}
printf("输入你想删除的那个数:\n");
scanf("%d",&n);
delete(&head,n);
printf("输入你想插入的位置上的那个数 :\n");
scanf("%d",&loc);
insert(&head,loc);
printf("插入后的结果是\n");
display_link(head);*/
printf("倒序输出是:\n");
reverse(&head);
display_link(head);
free_link(&head);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct node
{
char name[20];
int num;
struct node *next;
};
typedef struct node Node;
typedef struct node * Link;
void creat_link(Link *head)
{
*head = NULL;
}
void creat_new_node(Link* new_node)
{
*new_node = (Link)malloc(sizeof(Node));
if(*new_node == NULL)
{
printf("malloc is error!\n");
exit(-1);
}
}
void insert_node_head(Link *head,Link new_node)
{
new_node->next = *head;
*head = new_node;
}
void insert_node_tail(Link *head,Link new_node)
{
Link p = NULL;
if(*head == NULL)
{
new_node->next = *head;
*head = new_node;
}
else
{
p = *head;
while(p->next != NULL)
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
}
void display_link(Link head)
{
Link p = head;
if(head == NULL)
{
printf("Link is empty!\n");
}
while(p != NULL)
{
printf("%d %s\n",p->num,p->name);
printf("\n");
p = p->next;
}
}
void free_link(Link *head)
{
Link p;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
if(*head == NULL)
{
printf("释放成功!\n");
}
}
int len(Link head)
{
int n = 0;
Link p = head;
while(p->next != NULL)
{
n++;
p = p->next;
}
return n+1;
}
Link search(Link * head,int m)
{
Link p = *head;
if(*head == NULL)
{
printf("the list is empty!\n");
return;
}
while(p != NULL && (p->num) != m)
{
p = p->next;
}
return p;
}
void delete(Link *head,int n)
{
Link p = *head;
Link q = *head;
if(*head == NULL)
{
printf("the list is empty!\n");
}
else if(((*head)->num) == n)
{
*head = (p->next);
free(p);
display_link(*head);
}
else
{
while(p != NULL && (p->num) != n)
{
q = p;
p = p->next;
}
if(p == NULL)
{
printf("no exist!\n");
}
else
{
q->next = (p->next);
free(p);
display_link(*head);
}
}
}
void insert(Link *head,int loc)
{
Link q = *head;
Link p = *head;
Link new_node = NULL;
creat_new_node(&new_node);
printf("enter the number:");
scanf("%d",&(new_node->num));
printf("enter the name:");
scanf("%s",new_node->name);
if(*head == NULL)
{
printf("the list is empty!\n");
}
else if(((*head)->num) == loc)
{
new_node->next = *head;
*head = new_node;
}
else
{
while(p != NULL && (p->num) != loc)
{
q = p;
p = p->next;
}
if(p == NULL)
{
printf("没有这个学号!\n");
}
else
{
q->next = new_node;
new_node->next = p;
}
}
}
void reverse(Link *head)
{
Link p1 = *head;
Link p2;
Link p3;
if(*head == NULL)
{
printf("链表是空的\n");
}
else if((*head)->next == NULL)
{
printf("链表只有一个节点\n");
}
else
{
p2 = p1->next;
p3 = p2->next;
p2->next = p1;
while(p3 != NULL)
{
p1 = p2;
p2 = p3;
p3 = p3->next;
p2->next = p1;
}
(*head)->next = NULL;
*head = p2;
}
}
void insert_sort(Link *head,Link new_node)
{
Link p = *head;
Link q = *head;
if(*head == NULL)
{
*head = new_node;
}
else if((*head)->next == NULL)
{
if((new_node->num) > ((*head)->num))
{
insert_node_tail(head,new_node);
}
else
{
insert_node_head(head,new_node);
}
}
else
{
while(p!= NULL && p->num < (new_node->num))
{
q = p;
p = p->next;
}
if(p == *head)
{
insert_node_head(head,new_node);
}
else
{
new_node->next = p;
q->next = new_node;
}
}
}
int main()
{
int i,t,m,n,d,loc;
Link head = NULL;
Link f = NULL;
creat_link(&head);
Link new_node = NULL;
printf("你想输入几个姓名:");
scanf("%d",&t);
printf("输入学号和姓名:\n");
for(i = 0;i < t;i++)
{
creat_new_node(&new_node);
scanf("%d%s",&(new_node->num),new_node->name);
// insert_node_head(&head,new_node);
// insert_node_tail(&head,new_node);
insert_sort(&head,new_node);
}
/* printf("由小到大排序输出:\n");
display_link(head);
printf("链表长度为 : %d\n",len(head));
printf("输入你想查询的学号:\n");
scanf("%d",&m);
printf("\n");
f = search(&head,m);
if(f != NULL)
{
printf("查询结果是:\n");
printf("%d ",f->num);
printf("%s\n",f->name);
}
else
{
printf("没有这个数!\n");
}
printf("输入你想删除的那个数:\n");
scanf("%d",&n);
delete(&head,n);
printf("输入你想插入的位置上的那个数 :\n");
scanf("%d",&loc);
insert(&head,loc);
printf("插入后的结果是\n");
display_link(head);*/
printf("倒序输出是:\n");
reverse(&head);
display_link(head);
free_link(&head);
return 0;
}