码迷,mamicode.com
首页 > 其他好文 > 详细

单链表操作系列

时间:2014-07-24 23:33:03      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:算法   面试题   单链表   

#include<stdio.h>
#include<stdlib.h>


typedef int ElemType;
//定义结点类型
typedef struct Node
{
	ElemType data;
	struct Node *next;
}LNode,*LinkList;




//单链表的建立1,头插法建立单链表,逆序生成
LinkList LinkListCreateH()
{
	LinkList L,p;
	L = (LinkList)malloc(sizeof(LNode));
	L->data = -1;
	L->next = NULL;
	ElemType x;
	while(scanf("%d",&x)!=EOF)
	{
		p = (LinkList)malloc(sizeof(LNode));
		p->data = x;
		p->next = L->next;
		L->next = p;
	}
	return L;
}


//单链表的建立2,尾插法建立单链表
LinkList LinkListCreateT()
{
	LinkList L,p,q;
	L = (LinkList)malloc(sizeof(LNode));
	L->data = -1;
	L->next = NULL;
	q=L;
	ElemType x;
	while(scanf("%d",&x)!=EOF)
	{
		p = (LinkList)malloc(sizeof(LNode));
		p->data = x;
		q->next = p;
		q=p;
		
	}
	q->next = NULL;
	return L;
}


//单链表的插入,在链表的第i个位置插入x的元素
LinkList LinkListInsert(LinkList L,int i,ElemType x)
{
	LinkList p,q;
	p = L;
	for(int temp=0;temp<i;++temp)
		p = p->next;
	q = (LinkList)malloc(sizeof(LNode));
	q->data = x;
	q->next = p->next;
	p->next = q;


	return L;
}


//单链表的删除,在链表中删除值为x的元素
LinkList LinkListDelete(LinkList L,ElemType x)
{
	LinkList p,q;
	p=q = L;//不能为L->next,不然当删除第一个元素时会出错
	while(p->next->data!=x)
		p = p->next;
	if(p->next)
	{
		q=p->next;
		p->next=q->next;
		free(q);
	}
	
	return L;
}


//单链表逆置
LinkList LinkListReverse(LinkList L)
{
	printf("逆置开始");
	LinkList p,q;
	p=q=L->next;
	L->next = NULL;
	while(p)
	{
		q=p->next;
		p->next = L->next;
		L->next = p;
		p=q;


	}
	return L;


}


//单链表排序
LinkList LinkListSort(LinkList L)
{
		printf("排序开始!");


	LinkList p,q;
	int temp;
	for (p=L->next;p!=NULL;p=p->next)
	{
		for (q=p->next;q!=NULL;q=q->next)
		{
			
			if(q->data<p->data)
			{
				temp=q->data;
				q->data = p->data;
				p->data = temp;
			}
			
		}
	}
	return L;


}


//主函数
int main()
{
	LinkList list,start;
	printf("输入单链表的数据:\n");
	list = LinkListCreateT();
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
	
	printf("创建成功,请输入插入的元素位置及数据:\n");
	int x,y;
	scanf("%d,%d",&x,&y);
	LinkListInsert(list,x,y);
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
	printf("插入成功,请输入删除的元素:\n");
	int z;
	scanf("%d",&z);
	LinkListDelete(list,z);
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
		 
	printf("将单链表进行逆置吗?");
	int flag;
	scanf("%d",&flag);
	if(flag==1)
		LinkListReverse(list);
	else
		printf("不逆置!");
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
  
	printf("将单链表进行排序吗?");
	int flag1;
	scanf("%d",&flag1);
	if(flag1==1)
		LinkListSort(list);
	else
		printf("不排序!");
	for(start = list->next;start!=NULL;start=start->next)
		printf("%3d",start->data);
		
	return 0;
}

单链表操作系列,布布扣,bubuko.com

单链表操作系列

标签:算法   面试题   单链表   

原文地址:http://blog.csdn.net/woailvmengmeng/article/details/38087663

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