您的位置:首页 > 其它

链表的基本操作

2013-09-05 22:48 302 查看
/*
*@author ?
*@since 2011/07/29
*@function 实现链表的常用操作,比较粗糙。
*          功能大概是:显示链表结构;查询链表;删除节点;插入结点;修改结点
*/
#include <stdio.h>
#include <stdlib.h>

struct node
{
int value;
struct node *next;
};
/*
*插入结点(单个)
*/
struct node *add_to_list(struct node *list,int n)
{
struct node *new_node;

new_node=(node *)malloc(sizeof(struct node));
if(new_node==NULL)
{
printf("Error:malloc failed in add_to_list\n");
exit(EXIT_FAILURE);
}
new_node->value=n;
new_node->next=list;

return new_node;
}
/*
*添加结点(多个)
*/
struct node *read_numbers(void)
{
struct node *first=NULL;
int n;

printf("Enter a series of integers (0 to terminate): ");
for(;;)
{
scanf("%d",&n);
if(n==0)
{
return first;
}
first=add_to_list(first,n);
}
}
/*
*搜索结点
*/
struct node *search_list(struct node *list,int n)
{
struct node *p;

for(p=list;p!=NULL;p=p->next)
if(p->value==n)
return p;

return NULL;
}
/*
*删除结点
*/
struct node *delete_node(struct node *list,int n)
{
struct node *cur,*prev;

for(cur=list,prev=NULL;
cur!=NULL&&cur->value!=n;
prev=cur,cur=cur->next)
;
if(cur==NULL)
{
return list;
}
if(prev==NULL)
{
list=list->next;
}else
{
prev->next=cur->next;
}
free(cur);

return list;
}
/*
*修改结点
*/
struct node *update_node(struct node *list,int n)
{
struct node *cur;
int new_value;

for(cur=list;cur!=NULL&&cur->value!=n;cur=cur->next)
;
if(cur==NULL)
{
printf("NO NODE!!!");
}
printf("please enter the new value: ");
scanf("%d",&new_value);
cur->value=new_value;

return list;
}
/*
*打印链表结点结构
*/
void print(struct node *list)
{
struct node *p;

printf("The current relation of the list is ");

for(p=list;p!=NULL;p=p->next)
{
if(p->next!=NULL)
{
printf("%d->",p->value);
}else
{
printf("%d\n",p->value);
}
}
}

int main()
{
struct node *test,*p;
int n;

test=read_numbers();

/*
*输出当前链表
*/
print(test);

/*
*查找链表中结点,并输出结点的值
*/
printf("Please enter the value to look for: ");
scanf("%d",&n);
p=search_list(test,n);
printf("The value of the node is %d\n",p->value);

/*
*删除结点并显示更新后链表的结构
*/
printf("Please choose the value of the node you would like to delete: ");
scanf("%d",&n);
p=delete_node(test,n);
print(p);

/*
*修改结点并显示更新后链表的结构
*/
printf("Please choose the value of the node you would like to update: ");
scanf("%d",&n);
p=update_node(test,n);
print(p);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: