码迷,mamicode.com
首页 > 编程语言 > 详细

用C语言实现单链表的各种操作

时间:2015-04-11 09:03:35      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<stdlib.h>
struct LinkList
{
	
	int data;
	struct LinkList *next;
};

/*初始化链表*/

void init_list(LinkList **head)                 
{
	*head=(LinkList *)malloc(sizeof(LinkList));
	(*head)->next=NULL;
}

/*添加节点*/

void add_node(LinkList *head)   
{
	int x; 
	LinkList *p,*q;
	q=head;
	printf("input add a data:");  
	scanf("%d",&x); 
	while(q->next)
		q=q->next;
		p=(LinkList *)malloc(sizeof(LinkList));
		p->data=x;
        p->next=q->next;
		q->next=p;
} 

/*查找第i个节点,返回节点指针*/ 
   
LinkList *get_node(LinkList *head,int i)
{
	LinkList *p=head;
	int j=0;
    while(p->next&&j<i)
	{
		p=p->next;
		j++;
	}
    if(j=i)
		return p;
	else
		return NULL;
}

/*按值查找节点,返回节点指针*/

void get_value(LinkList *head,int x)
{   
	int flag=0;
	LinkList *p=head;
	while(p->next)
	{
		p=p->next;
		if(p->data==x)
		{
	    printf("%d\n",p->data);
		flag=1;
		break;
		}
	}
	if(!flag)
	printf("fail!\n");
	
}

/*在链表中第i个节点之前插入节点*/

void insert_node(LinkList *head,int i,int x)
{
	LinkList *p,*q;
	q=(LinkList *)malloc(sizeof(LinkList));
	p=get_node(head,i-1);
	if(p)
	{
	q->next=p->next;
	p->next=q;
    q->data=x;
	}
	else
		printf("node in not exist!\n",i);
}
/*删除第i个节点*/

void delete_node(LinkList *head,int i)
{
	LinkList *p,*q;
    p=get_node(head,i-1);
	q=get_node(head,i);
	if(q!=NULL)
	{
		p->next=q->next;
		free(q);
	}
	
	else 
		printf("node in not exist!\n");
}

/*修改链表中第i个节点*/

void modify_node(LinkList *head,int i,int x)
{
	
	LinkList *p;
	p=get_node(head,i);
	if(p!=NULL)
		p->data=x;
}

/*显示链表中节点的数据*/

void show(LinkList *head)
{
	LinkList *p;
	p=head->next;
	p=head;
	while(p->next)
		{
	p=p->next;
	printf("%2d",p->data);
	}
	printf("\n");
	
}

int main()  
{  
	
    struct LinkList *p;  
    p=new LinkList;   
    int ch,i,x; 
	init_list(&p);
    add_node(p);  
    while(1)  
    {  
		printf("******************************************************\n");  
		printf("  1.add   2.get node by index   3.get node by value  4.insert \n  5.delete  6.modify  7.show 0.quit\n");  
		printf("******************************************************\n");   
		printf("please input your choice:");  
		scanf("%d",&ch);  
		switch(ch)  
		{  
			
		case 1: add_node(p);
				break; 
		case 2: 
			{
				printf("input a number:");  
				scanf("%d",&i);  
				printf("%d\n",(LinkList *)get_node(p,i)->data);
				break;
			}
		case 3:  { 
			   printf("input value of x:");  
			   scanf("%d",&x); 
			   get_value(p,x);
			    break;  
				 }  
		case 4: 
			{  
				printf("input values of i and x:");
				scanf("%d%d",&i,&x);
				insert_node(p,i,x);  
				break;  
			}
		case 5:  
			{
				printf("input value of i:");  
				scanf("%d",&i); 
				delete_node(p,i);
				break;
			}
		case 6:  {  
			printf("input values of i and x:");  
			scanf("%d%d",&i,&x);  
			modify_node(p,i,x);  
			break;  
				 }
		case 7: show(p);  
			break;  
		case 0: exit(0);      
		default:printf("error! please input again:\n");  
            break;  
		}  
	}  
	
	return 0;  
}

技术分享

用C语言实现单链表的各种操作

标签:

原文地址:http://blog.csdn.net/yangshuangtao/article/details/44984283

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!