链表

来源:互联网 发布:安卓翻墙软件哪个好 编辑:程序博客网 时间:2024/05/29 03:09
#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 len_link(Link head)                      //计算链表长度
{
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;
}
0 0
原创粉丝点击