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

原创 2015年07月07日 23:26:48
#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;
}

C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。

C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。...
  • liu_if_else
  • liu_if_else
  • 2015年10月01日 16:09
  • 914

链表的基本操作(C语言版):建立,插入,删除,查找,输出

//1、链表的基本操作(不带头结点)//**的含义把握不准确,要认真研究练习 #include #include typedef struct list { int data; struc...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2013年03月04日 12:44
  • 5775

用c语言完成一个双向链表的创建,插入,删除

/*dlist.h*/     #ifndef DList_H       #define DList_H       typedef  int Item;       typedef struct ...
  • u013012494
  • u013012494
  • 2014年09月13日 08:38
  • 2430

C语言实现链表的插入、删除、查询操作

前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中链表部分的伪代码实现。题目要求 设计链表结构体 建立一个链表,并录入n个原始数据 实现向链表中指定位置插入数据的功能 ...
  • lgj123xj
  • lgj123xj
  • 2017年05月08日 13:09
  • 750

单链表插入和删除结点c语言的实现

个人学习的一些笔记,如果有误,希望指正
  • mango_haoming
  • mango_haoming
  • 2017年03月10日 11:22
  • 1807

C语言实现链表节点的插入和删除

/* 链表节点的插入与删除 编译环境:VC++ 6.0 编译系统:windows XP SP3 */ #include #include #...
  • Jamie321
  • Jamie321
  • 2016年08月30日 15:22
  • 3758

【C语言】 链表 单链的建立,节点增加 删除 顺序插入

上一篇的升级版 #include #include struct bookdata{ int book; struct bookdata *next; };  /* 打印链表 */  ...
  • hqweay
  • hqweay
  • 2016年11月12日 18:53
  • 851

有序插入建立链表 C语言实现

实现代码/*有序插入建立链表 C语言实现*/#include #include/*定义一个linklist结构体类型*/ typedef struct linklist { int data;...
  • y396397735
  • y396397735
  • 2016年01月13日 13:24
  • 1561

C语言实现链表节点的插入和删除

http://www.cnblogs.com/scrat/archive/2012/08/17/2644086.html 今天我实现的是插入链表节点和删除链表节点。 看代码吧,...
  • jeffasd
  • jeffasd
  • 2016年06月07日 11:09
  • 892

[转]C语言之单向链表的创建插入删除等功能

数据结构学习笔记之链表(C语言版) 分类: 技术交流2015-01-04 18:34 183人阅读 评论(0) 收藏 举报 数据结构c语言线性表单链表合并        链表是一种物理存储...
  • rc0711
  • rc0711
  • 2015年06月11日 17:20
  • 530
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言链表的创建、插入、删除、排序
举报原因:
原因补充:

(最多只允许输入30个字)