标签:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
	int data;
	Node * pNext;
}NODE,* PNODE;
PNODE create_List();
void traverse_List(PNODE pHead);
bool is_empty(PNODE pHead);
int length_List(PNODE pHead);
bool insert_List(PNODE pHead,int position,int num);
bool delete_List(PNODE pHead,int position,int * num);
void sort_List(PNODE pHead); 
int main()
{
	int num;
	PNODE pHead=NULL;
	pHead=create_List();
	traverse_List(pHead);
	if(is_empty(pHead))
	{
		printf("链表为空\n");
	}
	printf("链表长度为%d\n",length_List(pHead));
	sort_List(pHead);
	printf("排序后:\n");
	traverse_List(pHead);
	insert_List(pHead,2,2);
	printf("添加元素后:\n");
	traverse_List(pHead);
	delete_List(pHead,2,&num);
	printf("删除值为%d的元素2后:\n",num);
	traverse_List(pHead);
	return 0;
}
PNODE create_List()
{
	int len;
	int val;
	PNODE pHead=(PNODE)malloc(sizeof(NODE));
	if(NULL==pHead)
	{
		printf("分配失败,程序终止\n");
		exit(0);
	}
	PNODE pTail=pHead;
	pTail->pNext=NULL;
	printf("请输入要生成的节点个数:");
	scanf("%d",&len);
	for(int i=0;i<len;i++)
	{
		printf("请输入第%d个节点的值:",i+1);
		scanf("%d",&val);
		PNODE pNew=(PNODE)malloc(sizeof(NODE));
		if(NULL==pNew)
		{
			printf("分配失败,程序终止\n");
			exit(0);
		}
		pNew->data=val;
		pTail->pNext=pNew;
		pNew->pNext=NULL;
		pTail=pNew;
	}
	return pHead;
}
void traverse_List(PNODE pHead)
{
	PNODE temp=pHead->pNext;
	while(temp!=NULL)
	{
		printf("%d\n",temp->data);
		temp=temp->pNext;
	}
}
bool is_empty(PNODE pHead)
{
	if(NULL==pHead->pNext)
	{
		return true;
	}
	else
	{
		return false;
	}
}
int length_List(PNODE pHead)
{
	int len=0;
	PNODE temp=pHead->pNext;
	while(temp)
	{
		len++;
		temp=temp->pNext;
	}
	return len;
}
void sort_List(PNODE pHead)
{
	PNODE p,q;
	int i,j,temp;
	int len=length_List(pHead);
	for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
	{
		for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
		{
			if(q->data<p->data)
			{
				temp=q->data;
				q->data=p->data;
				p->data=temp;
			}
		}
	}
}
bool insert_List(PNODE pHead,int position,int num)
{
	int i=0;
	PNODE p=pHead;
	while(NULL!=p&&i<position-1)
	{
		p=p->pNext;
		i++;
	}
	if(i>position-i||NULL==p)
	{
		return false;
	}
	PNODE pNew=(PNODE)malloc(sizeof(NODE));
	if(NULL==pNew)
	{
		printf("分配失败,程序终止\n");
		exit(0);
	}
	pNew->data=num;
	pNew->pNext=p->pNext;
	p->pNext=pNew;
	return true;
}
bool delete_List(PNODE pHead,int position,int * num)
{
	int i=0;
	PNODE p=pHead;
	while(NULL!=p->pNext&&i<position-1)
	{
		p=p->pNext;
		i++;
	}
	if(i>position-i||NULL==p->pNext)
	{
		return false;
	}
	PNODE q=p->pNext;
	*num=q->data;
	p->pNext=p->pNext->pNext;
	free(q);
	q=NULL;
	return true;
}
标签:
原文地址:http://www.cnblogs.com/flypie/p/4675528.html