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语言实现单链表的操作:创建,删除,插入,反转, 排序等

最近学了数据结构的单链表基本操作:创建,删除,插入,反转,排序等.         如有不当或错误之处,欢迎指正,不胜感激!   #include #include #include i...
  • wahack
  • wahack
  • 2011年10月29日 14:45
  • 715

C语言中单向非循环链表的生成,遍历,排序,插入和删除

#include #include #include //链表中一个节点 typedef struct Node { int data;//存储数据的变量 struct Nod...

链表操作 (C语言)插入,合并,销毁,删除,冒泡排序

#include #include #include typedef struct Node{     int data;     struct Node *next; }node...

C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等

#include #include #include //定义结点 typedef struct Node { int data; struct Node * pNext;...

C语言 ---单链表创建、求长度、删除、排序等操作

#include #include //定义单链表结点结构体 typedef int ElemType; typedef struct Node { ElemType data; struct...

C语言链表插入排序

C语言链表插入排序 大家好,我就是人见人爱 花见花开车见爆胎的小智 声音依旧是那么低沉切性感,现在又来给大家更新博客的第一视角了。 这期给大家介绍的是链表的插入排序。 具体代码如下: st...

C语言文件读取和单链表的添加、删除和排序等操作实例

/* 1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯 2、将学号重复的删除 3、显示导入的学生信息 4、按学号、姓名、性别、籍贯相等和不相等查找 5、多次查找 6、查找结果写入文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言链表的创建、插入、删除、排序
举报原因:
原因补充:

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