#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
char name[20];
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
void create_link(Link * head) //创建链表
{
*head = NULL;
}
void insert_link_node(Link *head,Link new_head) //插入
{
new_head->next = *head;
*head = new_head;
}
int display_link(Link head) //打印链表
{
int n = 0;
Link p = NULL;
p = head;
if(head == NULL)
{
printf("Empty!\n");
return ;
}
while(p != NULL)
{
printf("num = %d ",p->num);
printf("name = %s\n",p->name);
p = p->next;
n++;
}
return n;
}
void realease_link(Link *head) //释放空间
{
Link p = NULL;
p = *head;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
{
int n = 0;
Link p = NULL;
p = head;
if(head == NULL)
{
// printf("Empty!\n");
return 0;
}
else
{
while(p != NULL)
{
// printf("num = %d ",p->num);
// printf("name = %s\n",p->name);
p = p->next;
n++;
}
return n;
}
}
Link ask_link(Link head,int num) // 查询某个结点
{
Link new_node = NULL;
new_node = head;
while(num != new_node->num && new_node->next != NULL)
{
new_node = new_node->next;
}
if(num == new_node->num)
return new_node;
else
return NULL;
}
void delete_link(Link *head,int i) //删除某个结点
{
Link p = NULL;
Link q = *head; //遍历找出要删除的结点
if(*head == NULL)
return;
else
{
if((*head)->num == i)
{
*head = q->next;
free(q);
}
else
{
while(q != NULL && q->num != i)
{
p = q;
q = q->next;
}
if(q != NULL)
{
p->next = q->next;
free(q);
}
}
}
}
int main()
{
Link head = NULL;
Link k = NULL;
create_link(&head);
Link new_node = NULL;
int i;
int n;
int u; //要删除的结点
int num;
for(i = 0;i < 3;i++)
{
new_node = (Link)malloc(sizeof(Node));
if(new_node == NULL)
{
printf("malloc error\n");
exit(-1);
}
new_node->num = i + 1;
scanf("%s",new_node->name);
insert_link_node(&head,new_node);
}
display_link(head);
n = len_link(head);
printf("len = %d\n",n);
printf("please input a number you want to ask:\n");
scanf("%d",&num);
k = ask_link(head,num);
if(k == NULL)
printf("None!\n");
else
printf("name = %s\n",k->name);
printf("The number you want to delete is :\n");
scanf("%d",&u);
delete_link(&head,u);
display_link(head);
return 0;
}
#include <stdlib.h>
struct node
{
int num;
char name[20];
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
void create_link(Link * head) //创建链表
{
*head = NULL;
}
void insert_link_node(Link *head,Link new_head) //插入
{
new_head->next = *head;
*head = new_head;
}
int display_link(Link head) //打印链表
{
int n = 0;
Link p = NULL;
p = head;
if(head == NULL)
{
printf("Empty!\n");
return ;
}
while(p != NULL)
{
printf("num = %d ",p->num);
printf("name = %s\n",p->name);
p = p->next;
n++;
}
return n;
}
void realease_link(Link *head) //释放空间
{
Link p = NULL;
p = *head;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
}
{
int n = 0;
Link p = NULL;
p = head;
if(head == NULL)
{
// printf("Empty!\n");
return 0;
}
else
{
while(p != NULL)
{
// printf("num = %d ",p->num);
// printf("name = %s\n",p->name);
p = p->next;
n++;
}
return n;
}
}
Link ask_link(Link head,int num) // 查询某个结点
{
Link new_node = NULL;
new_node = head;
while(num != new_node->num && new_node->next != NULL)
{
new_node = new_node->next;
}
if(num == new_node->num)
return new_node;
else
return NULL;
}
void delete_link(Link *head,int i) //删除某个结点
{
Link p = NULL;
Link q = *head; //遍历找出要删除的结点
if(*head == NULL)
return;
else
{
if((*head)->num == i)
{
*head = q->next;
free(q);
}
else
{
while(q != NULL && q->num != i)
{
p = q;
q = q->next;
}
if(q != NULL)
{
p->next = q->next;
free(q);
}
}
}
}
int main()
{
Link head = NULL;
Link k = NULL;
create_link(&head);
Link new_node = NULL;
int i;
int n;
int u; //要删除的结点
int num;
for(i = 0;i < 3;i++)
{
new_node = (Link)malloc(sizeof(Node));
if(new_node == NULL)
{
printf("malloc error\n");
exit(-1);
}
new_node->num = i + 1;
scanf("%s",new_node->name);
insert_link_node(&head,new_node);
}
display_link(head);
n = len_link(head);
printf("len = %d\n",n);
printf("please input a number you want to ask:\n");
scanf("%d",&num);
k = ask_link(head,num);
if(k == NULL)
printf("None!\n");
else
printf("name = %s\n",k->name);
printf("The number you want to delete is :\n");
scanf("%d",&u);
delete_link(&head,u);
realease_link(&head);
display_link(head);
return 0;
}