链表
来源:互联网 发布:安卓翻墙软件哪个好 编辑:程序博客网 时间: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 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;
}
0 0
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- React-Native中处理ListView上拉加载更多
- python2 import urllib2报错
- 欢迎使用CSDN-markdown编辑器
- python、main函数和argv参数
- TreeView简单使用
- 链表
- 传输资料在100MB以上的 传输介质选择
- Android Studio Duplicate files copied in APK
- grep常用功能整理
- Ubuntu的MySQL中文乱码问题--自己躺坑
- 纯代码给wordpress增加说说/微博/微语功能
- 贝塞尔曲线实践-动画框架
- Linux系统使用(一)
- .net 网站应对压力的一些方案总结