链表创建完整版

链表创建完整版

** --此代码仍取材于郝斌老师,但对插入和删除节点做了优化 ,如有错误,敬请指正
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *pNext;
}NODE,*PNODE;
PNODE create_list(void);
void traveser_list(PNODE pHead);
bool is_empty_list(PNODE pHead);
int length_list(PNODE pHead);
bool insert_list(PNODE pHead,int len);
bool delete_list(PNODE pHead);
void sort_list(PNODE pHead);
int main()
{
int len;
PNODE pHead=NULL;//--------->1.
pHead=create_list();
traveser_list(pHead);
//printf("%d",is_empty_list(pHead));
len=length_list(pHead);
printf(“再次确定该链表的长度为:%d\n”,len);
//insert_list(pHead,len);
//traveser_list(pHead);
delete_list(pHead);
printf(“现在的链表为:\n”);
traveser_list(pHead);
sort_list(pHead);
//traveser_list(pHead);
return 0; //
}
PNODE create_list(void)
{
int len,val;
PNODE pHead=(PNODE)malloc(sizeof(NODE));//------>

printf("你想要创建的链表长度为:");
scanf("%d",&len);
PNODE pTail=pHead;
pTail->pNext=NULL;
for(int i=0;i<len;i++)
{
	scanf("%d",&val);
	PNODE pNew=(PNODE)malloc(sizeof(NODE));
	if(pNew==NULL)
	{
		printf("分配内存是失败!");
		exit(-1);
	}
	pNew->data=val;
	pTail->pNext=pNew;
	pNew->pNext=NULL;
	pTail=pNew;
	
}
return pHead;

}
void traveser_list(PNODE pHead)
{
PNODE p;
int i=1;
p=pHead->pNext;
while(p!=NULL)
{
printf(“第%d个节点保存的数值为:%d\n”,i,p->data);//-------->
i++;
p=p->pNext;
}
return ;
}
bool is_empty_list(PNODE pHead)
{
PNODE p=pHead;
if(p->pNext==NULL)
return false;
else
return true;
}
int length_list(PNODE pHead)
{
if(is_empty_list(pHead))
{
int i=0;
PNODE p=pHead;
while(p->pNext!=NULL)
{
i++;
p=p->pNext;
}
return i;
}
else
printf(“该链表为空\n”);
exit(-1);
return 0;

}
bool insert_list(PNODE pHead,int len)//改良版插入节点
{
int pos;
int i=0;
int val;
printf(“你想插入节点的位置是:”);
scanf("%d",&pos);
PNODE p=pHead;
while(i<pos-1 &&p!=NULL)//------------>
{
p=p->pNext;
i++;
}
if(i>pos-1||p==NULL)//------------>
{
printf(“插入位置不应为负\n”);
return false;

}
printf("你想插入的元素为:");
scanf("%d",&val);
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew==NULL)
{
	printf("分配内存是失败!");
	return false;
	exit(-1);
}
pNew->data=val;
pNew->pNext=p->pNext;
p->pNext=pNew;
return true;

}
bool delete_list(PNODE pHead)//改良版删除节点
{
int pos;
int i=0;
PNODE p=pHead;
printf(“你想删除的节点位置是:”);
scanf("%d",&pos);
while(i<pos-1&&p!=NULL)
{
p=p->pNext;
i++;
}
if(i>pos-1||p==NULL)
return false;
PNODE q;
q=p->pNext;
printf(“你删除的节点是第%d位,其值为:%d”,pos,q->data);
p->pNext=p->pNext->pNext;
free(q);
return true;
}
void sort_list(PNODE pHead)
{
int i,j,k;
PNODE p,q;
int len=length_list(pHead);
for(i=0,p=pHead->pNext;i<len-1;p=p->pNext,i++)//------->
{
for (j=i+1,q=p->pNext;j<len;q=q->pNext,j++)//------>
{
if(p->data>q->data)
{
k=p->data;
p->data=q->data;
q->data=k;
}
}
}
return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值