今日完成
准备堆排序PPT
完善电话簿项目
题目:创建两个学生链表,含有姓名、年龄的信息,一个链表存放男生,一个链表存放女生
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct dnode
{
char name[30];
int age;
struct dnode * prior;
struct dnode * next;
};
typedef struct dnode Dnode;
typedef struct dnode * Dlink;
void is_malloc_ok(Dlink node)
{
if (node == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
void create_node(Dlink * node)
{
*node = (Dlink)malloc(sizeof(Dnode));
is_malloc_ok(*node);
}
void create_link(Dlink * head)
{
create_node(head);
(*head)->prior = (*head)->next = (*head);
}
void insert_node_tail(Dlink head, Dlink new_node)
{
Dlink p;
p = head->prior;
new_node->next = head;
new_node->prior = p;
p->next = new_node;
head->prior = new_node;
}
/*void insert_node_mid(Dlink head, Dlink new_node, int loc)
{
Dlink p;
p = head->next;
while (p != head && p->num != loc)
{
p = p->next;
}
new_node->prior = p->prior;
new_node->next = p;
p->prior->next = new_node;
p->prior = new_node;
}*/
void insert_node_sort(Dlink head, Dlink new_node)
{
Dlink p;
p =head->next;
while (p != head && (p->age) < new_node->age)
{
p = p->next;
}
new_node->prior = p->prior;
new_node->next = p;
p->prior->next = new_node;
p->prior = new_node;
}
void display_link(Dlink head)
{
Dlink p;
if (head == NULL)
{
printf("Link dont exit!\n");
return;
}
p = head->next;
if ((head->next) == NULL)
{
printf("Link is empty!\n");
return;
}
while (p != head)
{
printf("%s\n",p->name);
printf("%d\n",p->age);
p = p->next;
}
}
void free_link(Dlink head)
{
Dlink p;
p = head->next;
while(head->next != head)
{
p->next->prior = head;
head->next = p->next;
free(p);
p = head->next;
}
}
void release_link(Dlink *head)
{
free_link(*head);
free(*head);
*head = NULL;
}
int main()
{
int i,n;
char s[2];
Dlink head;
Dlink headt;
Dlink heada;
Dlink new_node;
create_link(&head);
create_link(&headt);
create_link(&heada);
system("clear");
printf("Please input students number :\n");
scanf("%d",&n);
printf("\n");
for (i = 0; i < n; i++)
{
//printf("i=%d\n",i);
create_node(&new_node);
printf("Please input student s sex (b/g):\n");
scanf("%s",&s[0]);
if(s[0] == 'b')
{
printf("Please input boy s name :\n");
scanf("%s",&new_node->name);
printf("Please input boy s age :\n");
scanf("%d",&new_node->age);
insert_node_sort(head,new_node);
}
else
{
printf("Please input gril s name :\n");
scanf("%s",&new_node->name);
printf("Please input gril s age :\n");
scanf("%d",&new_node->age);
insert_node_sort(headt,new_node);
}
}
printf("\n");
display_link(head);
printf("\n");
display_link(headt);
printf("\n");
// reverse_link(&head);
release_link(&head);
display_link(head);
return 0;
}