链表(尾插法实现链表)

/*
* 链表
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct NODE
{
	struct NODE*pnext;
	int data;
}NODE, *PNODE;

PNODE create_list1(void);//头插法
PNODE create_list2(void);//尾插法
bool is_empty(PNODE p);
int lenth(PNODE phead);
bool traverse_list(PNODE);
bool sort_list(PNODE);
bool delete_list(PNODE, int, int*);
bool insert_list(PNODE, int, int);

int main(void)
{
	int f;
	int x;
	PNODE phead = create_list1();
	traverse_list(phead);
	sort_list(phead);
	traverse_list(phead);
	f = lenth(phead);
	printf("%d\n", f);
	delete_list(phead, 3, &x);
	traverse_list(phead);
	insert_list(phead, 4, 5);
	traverse_list(phead);
	return 0;
}

PNODE create_list1(void)//头插法
{

	PNODE phead = (PNODE)malloc(sizeof(NODE));
	if (NULL == phead)
	{
		printf("分配失败!");
		exit(-1);
	}
	int len = 0;
	int i = 0;
	scanf("%d", &len);
	PNODE ptail = phead;
	ptail->pnext = NULL;
	for (i = 0; i < len; i++)
	{
		printf("请输入第%d个元素", i + 1);
		int val;
		scanf("%d", &val);
		PNODE pnew = (PNODE)malloc(sizeof(NODE));
		if (NULL == pnew)
		{
			printf("分配失败");
			exit(-1);
		}
		pnew->data = val;
		ptail->pnext = pnew;
		pnew->pnext = NULL;
		ptail = pnew;
	}
	return phead;
}
bool traverse_list(PNODE phead)
{
	if (is_empty(phead))
	{
		return false;
	}
	else
	{
		PNODE p;
		p = phead->pnext;
		while (p != NULL)
		{
			printf("%d", p->data);
			p = p->pnext;
		}
	}
	printf("\n");
	return true;
}

bool is_empty(PNODE phead)
{
	if (phead->pnext == NULL)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int lenth(PNODE phead)
{
	int x = 0;
	PNODE p;
	p = phead->pnext;
	while (p != NULL)
	{
		x++;
		p = p->pnext;
	}
	return x;
}

bool sort_list(PNODE phead)//从大到小进行排序
{
	int i, h,tem;
	PNODE p1,p2;
	int len = lenth(phead);
	for(i=0,p1=phead->pnext;i<len-1;i++,p1=p1->pnext)
		for (h = i + 1,p2=p1->pnext;h < len; h++,p2=p2->pnext)
		{
			if (p2->data > p1->data)
			{
				tem = p1->data;
				p1->data = p2->data;
				p2->data = tem;
			}
		}
	return true;
}

bool delete_list(PNODE phead,int x,int* y)
{
	int i = 0;
	PNODE p = phead;
	while (p->pnext != NULL && i < x - 1)
	{
		i++;
		p = p->pnext;
	}
	if (i > x - 1 || p->pnext == NULL)
		return false;
	*y = p->data;
	PNODE q = p->pnext;
	p->pnext = p->pnext->pnext;
	free(q);
	q = NULL;
	return true;
}

bool insert_list(PNODE phead, int x, int y)//x代表所处位置,代表要插入的数值
{
	int i=0;
	PNODE p = phead;
	while (p->pnext != NULL && i < x - 1)
	{
		i++;
		p = p->pnext;
	}
	if (i > x - 1 || p->pnext == NULL)
		return false;
	PNODE pnew = (PNODE)malloc(sizeof(NODE));
	pnew->pnext = p->pnext;
	pnew->data = y;
	p->pnext = pnew;
}

附带删除插入代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lndksk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值