自己按照书上实现的c语言的单链表

#include
#include

#define ElemType int
#define Status int
#define OK 1
#define FALSE 0

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

//创建一个容量为size的单链表
Status Create_List(LinkList l,int size)
{
	int i=0;
	if(!l)
		return FALSE;
	l->next =NULL;
	while(idata=0;
		p->next = l->next;
		l->next = p;
		i++;
	}
	return OK;
}

//遍历输出单链表的所有元素
Status OutPut_List(LinkList l)
{
	LinkList p;
	if(l ==NULL)
	{
		printf("no node\n");
	}
	p=l->next; 
	printf("输出所有节点的数据\n");
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
	return OK;
}

//输入单链表的节点元素size个
Status Input_List(LinkList l,int size)
{
	LinkList p;
	int i=0;
	p = l->next;
	if(size <=0)
	{
		printf("error size\n");
		return FALSE;
	}

	printf("输入所有节点的数据\n");
	while(idata);
		p = p->next;
		i++;
	}
	return OK;
}

//在指定位置i处插入一个节点数据
Status Insert_List(LinkList l,int i,ElemType e)
{
	LinkList p;
	int j=1;
	p=l->next;
	if(i <0)
	{
		printf("Error i\n");
		return FALSE;
	}

	while(j < i)
	{
		p = p->next;
		j++;
	}
	LinkList q=(LinkList)malloc(sizeof(LNode));
	q->next = p->next;
	p->next = q;
	q->data = e;
	return OK;
}

//在指定位置i处删除节点
Status Delete_List(LinkList l,int i)
{
	LinkList p,q;
	int j=1;
	p= l;
	if(i <0)
	{
		printf("Error i\n");
		return FALSE;
	}
	while(j < i)
	{
		p =p->next;
		j++;
	}
	q = p->next;
	p->next = q->next;
	free(q);
	return OK;
}

//清空单链表所有的节点
Status Clear_List(LinkList l)
{
	LinkList p,q;
	p=l->next;
	while(p)
	{
		q = p->next;
		free(p);
		p = q;
	}
	l ->next = NULL;
	return OK;
}

//返回单链表的长度
Status Length_List(LinkList l)
{
	LinkList q;
	int i=0;
	q=l->next;
	while(q!=NULL)
	{
		i++;
		q = q->next;
	}
	printf("length is %d\n",i);
	return i;
}

//合并2个单链表(升序)
Status Merge_List(LinkList la,LinkList lb,LinkList lc)
{
	LinkList pa,pb,pc;
	pa = la->next;
	pb = lb->next;
	pc = lc;
	pc->next =NULL;

	while(pa && pb)
	{
		if(pa->data >= pb->data)
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		else
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
	}
		pc->next =pa?pa:pb;
	return OK;
}

int main(void)
{
	LinkList la = (LinkList)malloc(sizeof(LNode));
	LinkList lb = (LinkList)malloc(sizeof(LNode));
	LinkList lc = (LinkList)malloc(sizeof(LNode));
	int size=0;
	int i=0,e=1111,d=0;
	printf("input size\n");
	scanf("%d",&size);
	Create_List(la,size);
	Input_List(la,size);
	Create_List(lb,size);
	Input_List(lb,size);
	//Create_List(lc,6);
	Merge_List(la,lb,lc);
	OutPut_List(lc);

	return 0;
}

你可能感兴趣的:(自己按照书上实现的c语言的单链表)