`
kusebingtang
  • 浏览: 4296 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

单向链表

 
阅读更多

#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>


typedef struct Node
{
	int data;				//数据存储
	struct Node * pNext;	//链表的指针,指向下一个节点
}NODE,* PNODE;				//NODE 等价于struct Node PNODE等价于struct Node*

PNODE create_list(void);//创建一个链表元素
void traverse_list(PNODE);//对链表的元素便利输出
bool is_empty(PNODE pHead);//判断链表是否为空
int  length_list(PNODE pHead);//求链表的长度
void sort_list(PNODE pHead);//对链表的数据进行排序
bool insert_list(PNODE pHead,int pos, int value);//链表在pos位置添加一个节点元素
bool delete_list(PNODE pHead,int pos, int* pValue);//链表中删除pos位置的节点

int main(void) 
{
	PNODE pHead = NULL;
	pHead = create_list();
	traverse_list(pHead);

	//sort_list(pHead);
	//traverse_list(pHead);

	insert_list(pHead,4,44);
	traverse_list(pHead);
	int v;
	delete_list(pHead,1,&v);
	traverse_list(pHead);


	/*int length = length_list(pHead);
	printf("链表的长度是:%d\n",length);
	*/


	/*
	if(is_empty(pHead)) 
	{
		printf("链表不为空!\n");
	}
	else
	{
		printf("链表为空!\n");
	}
	*/

	return 0;
}

PNODE create_list(void)
{
	int len;		//有效节点个数
	int i;
	int val;		//节点的值

	PNODE pHead = (PNODE) malloc(sizeof(NODE));
	if(pHead==NULL) 
	{
		printf("程序分配节点失败,终止运行\n");
		exit(-1);
	}
	PNODE pTail = pHead;
	pTail ->pNext = NULL;

	printf("请输入您要生成链表节点的个数: len = ");
	scanf("%d",&len);

	for(i=0;i<len;++i) 
	{
		printf("请输入第%d节点的值:val = ",i+1);
		scanf("%d",&val);
		PNODE pNew = (PNODE) malloc(sizeof(NODE));
		if(pNew==NULL) 
		{
			printf("程序分配节点失败,终止运行\n");
			exit(-1);
		}
		pNew ->data = val;
		pNew ->pNext = NULL;
		pTail ->pNext = pNew;
		pTail = pNew;
	}
	return pHead;
}

void traverse_list(PNODE pHead)
{
	PNODE p = pHead ->pNext;
	while(NULL!= p) 
	{
		printf("%d " , p->data);
		p = p->pNext;
	}
	printf("\n");
	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 length = 0;
	while(NULL!= p) 
	{
		++length;
		p = p->pNext;
	}
	return length;
}

void sort_list(PNODE pHead)
{
	int i, j, temp;
	int length = length_list(pHead);

	PNODE p,q;
	for(i=0,p=pHead->pNext; i<length-1; p=p->pNext,i++) 
	{
		for(j=i+1,q=p->pNext;j<length;j++,q=q->pNext)
		{
			if(p->data > q->data) 
			{
				temp = p->data;
				p->data = q->data;
				q->data = temp;
			}
		}
	}
	return ;

}

bool insert_list(PNODE pHead,int pos, int value)
{
	int i =0;
	PNODE p = pHead;
	while(NULL!=p && i<pos-1)
	{
		p = p->pNext;
		++i;	
	}

	if(NULL ==p || i>pos-1)
	{
		return false;
	}

	PNODE pNew = (PNODE) malloc(sizeof(NODE));
	if(pNew==NULL) 
	{
		printf("程序分配节点失败,终止运行\n");
		exit(-1);
	}
	pNew ->data = value;
	PNODE q = p->pNext;
	p->pNext = pNew;
	pNew->pNext = q;
	return true;

}

bool delete_list(PNODE pHead,int pos, int* pValue)
{
	int i =0;
	PNODE p = pHead;
	while(NULL!=p->pNext && i<pos-1)
	{
		p = p->pNext;
		++i;	
	}

	if(NULL ==p->pNext || i>pos-1)
	{
		return false;
	}

	PNODE q = p->pNext;
	*pValue = q->data;
	p->pNext = p->pNext->pNext;
	free(q);
	q = NULL;
}

 

   刚开始学习数据结构,记录一下自己不熟练的C,写的链表单向链表功能,记录一下,以后可以复习

分享到:
评论

相关推荐

    单向链表 代码架构

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针或引用连接在一起,形成一个逻辑上的线性序列。单向链表的每个节点包含两部分...

    C#单向链表的实现

    本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么是单向链表。单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,...

    单向链表类模板_单向链表类模板_fastchq_

    单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C++编程中,为了实现通用性,我们通常会使用模板类来创建单向链表,以便它可以处理不同类型的元素。标题"单向链表类...

    单向链表源代码

    单向链表是一种基本的数据结构,它在计算机科学中被广泛应用,特别是在算法和数据结构的实现中。在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨...

    实验二 单向链表的有关操作.cpp

    1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减...

    单向链表实验报告(数据结构)

    在本篇数据结构实验报告中,我们关注的核心是单向链表这一数据结构。单向链表是一种线性数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。实验使用VC++ 6.0作为编程工具,旨在通过实践来深入理解和...

    04.单向链表以及单向链表的应用.ppt

    04.单向链表以及单向链表的应用.ppt

    Java 单向链表 插入与删除节点

    这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。

    数据结构 单向链表 双向链表 源程序

    本文将深入探讨两种重要的线性数据结构——单向链表和双向链表,以及它们在实际编程中的应用。 单向链表是一种线性数据结构,它的每个元素(称为节点)包含两部分:数据域,用于存储实际的数据;指针域,用于存储下...

    将一个单向链表反向连接

    将一个单向链表反向连接

    C语言自学链表,单向链表,双向链表,适合新手学习。

    本资源提供的是针对初学者设计的链表学习材料,包括单向链表和双向链表的实现。下面将详细讲解这两种链表的数据结构及其操作。 1. **单向链表**: 单向链表是一种线性数据结构,每个节点包含两部分:数据域和指针...

    C语言实现的一个单向链表逆转

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表逆转是计算机科学中常见的操作,它将链表中的元素顺序颠倒,使得原链表的最后一个元素成为新链表的第一个元素,而...

    单向链表多种功能实现

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本文中,我们将深入探讨如何实现单向链表的各种操作,包括建立链表、添加元素、删除元素、翻转链表(包括递归方法)...

    flash as3.0 实现的单向链表

    在IT领域,数据结构是编程基础中的重要组成部分,而单向链表作为基本的数据结构之一,在许多场景下都有着广泛的应用。本项目以Flash AS3.0为编程语言,实现了一个单向链表的数据结构,这对于理解和应用单向链表概念...

    C语言实现的单向链表和双向链表

    本主题将深入探讨由C语言实现的单向链表(slist.h)和双向链表(blist)。这两种链表各有特点,适用于不同的场景,对于理解和掌握数据结构与算法至关重要。 ### 单向链表(slist.h) 单向链表是一种线性数据结构,...

    C 语言版 单向链表

    C 语言版 单向链表 #include #include typedef struct student { int num; struct student *next; }st; st *creat() //创建链表 { st *head , *tail , *p; int num = 0; head = tail = p = NULL; printf...

    单向链表结点的逐个删除-C语言教程

    单向链表作为一种基础的数据结构,其插入、删除、创建和遍历操作是每个程序员必须熟练掌握的技能。本文将详细介绍如何使用C语言实现单向链表结点的逐个删除。 首先,我们要了解单向链表的基本概念。单向链表是由一...

    C语言实现单向链表及操作

    数据结构,c语言实现的单向链表。代码分享 struct LinkNode { int data; struct LinkNode *next; }; typedef struct LinkNode *Lnode;

    单向链表实现基排序

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在计算机科学中,链表常用于构建动态数据结构,因为它们允许高效的插入和删除操作,尤其是在元素的位置未知时。而基...

    单向链表的操作____

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来。每个链表节点包含两部分:数据域,用于存储实际的元素值;指针域,...

Global site tag (gtag.js) - Google Analytics