c语言链表的创建、插入、删除、排序

本文介绍了如何使用C语言创建链表,包括链表的遍历、判断空链表、获取链表长度、排序、插入元素以及删除元素等基本操作。通过示例代码详细讲解每个函数的实现过程。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<malloc.h>


typedef struct Node
{
	int data;
	struct Node * pNext;
}NODE,*PNODE;

PNODE create_list(void);
void traverse_list(PNODE pHead);
bool is_empty(PNODE pHead);
int length_list(PNODE pHead);
void sort_list(PNODE pHead);
bool insert_list(PNODE pHead,int pos,int val);
bool delete_list(PNODE pHead,int pos,int * pVal);

PNODE create_list(void){
	int len;
	int val;
	int i;
	printf("请输入节点个数:");
	scanf("%d",&len);
	PNODE pHead = (PNODE)malloc(sizeof(NODE));
	pHead->pNext = NULL;
	PNODE pTail = pHead;
	if(NULL==pHead){
		printf("内存分配失败");
		exit(-1);
	}
	for(i = 0;i<len;i++){
		printf("请输入第%d个节点的值",i+1);	
		scanf("%d",&val);
		PNODE pNew = (PNODE)malloc(sizeof(NODE));
		if(NULL==pHead){
			printf("内存分配失败");
			exit(-1);
		}
		pNew->data=val;
		pTail->pNext=pNew;
		pNew->pNext = NULL;
		pTail = pNew;
	}
	return pHead;
}

void traverse_list(PNODE pHead){
	PNODE p = pHead->pNext;
	while(NULL!=p){
		printf("%d",p->data);
		p=p->pNext;
	}
	return;
}

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

int length_list(PNODE pHead){
	PNODE p = pHead->pNext;
	int cnt=0;
	while(NULL!=p){
		cnt = cnt+1;
		p=p->pNext;
	}
	return cnt;
}

void sort_list(PNODE pHead){
	int i,j,t;
	PNODE p,q;
	int len=length_list(pHead);
	for(i=0,p=pHead->pNext;i<len;i++,p=p->pNext){
		for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext){
			t = p->data;
			p->data = q->data;
			q->data = t;
		}
	}
}

bool insert_list(PNODE pHead,int pos,int val){
	int i = 0;
	PNODE p = pHead;
	while(NULL != p && i<pos-1){
		p=p->pNext;
		i++;
	}
	if(i>pos-1 || NULL==p){
		return false;
	}
	PNODE pNew = (PNODE)malloc(sizeof(NODE));
	if(NULL==pNew){
		printf("分配内存失败");
		exit(-1);
	}
	pNew->data = val;
	pNew->pNext = p->pNext;
	p->pNext = pNew;
	
	return true;

}

bool delete_list(PNODE pHead,int pos,int * pVal){
	int i = 0;
	PNODE p = pHead;
	while(NULL != p->pNext && i<pos-1){
		p=p->pNext;
		i++;
	}
	if(i>pos-1 || NULL==p->pNext){
		return false;
	}
	PNODE pOld = p->pNext;
	*pVal = pOld->data;
	p->pNext = p->pNext->pNext;
	free(pOld);
	pOld = NULL;
	return true;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值