`
hufeng
  • 浏览: 103619 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

c语言之链表学习

c 
阅读更多

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAX 1000

/* 编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,个数都不大于1000),
并以从小到大的次序输出既在第一组整数中也在第二组整数中的所有整数(同一个整数不能输出两次)。
(输入时,两个相邻的整数用空格隔开)。*/

/*它能读入一串整数(以-9999为结束标记),再以与输入次序相反的次序输出这串整数(输入、出时,两个相邻的整数用空格隔开)*/

typedef struct Node
{
	int d;
	struct Node *next;
}NODE,*PNODE;

void printLinkList(PNODE head)
{
	PNODE p = head;
	while((p=p->next)!=NULL)
	{
		printf("%d ",p->d);
	}
}
//初始化链表 课本上
PNODE initLinklist()
{
	PNODE head,tail,p;
	int n;
	head = (PNODE)malloc(sizeof(NODE));
	tail=head;
	scanf("%d",&n);
	while(n!=-9999)
	{
		p = (PNODE)malloc(sizeof(NODE));

		p->d=n;
		tail->next=p;
		tail=p;
		scanf("%d",&n);
	}
	tail->next=NULL;
	return head;
}


PNODE initLinklist2()
{
	PNODE head,h,p;
	int d;
	head=h=(PNODE)malloc(sizeof(NODE));
	scanf("%d",&d);
	if(d==-9999)return head;
	do
	{
		p =(PNODE)malloc(sizeof(NODE));
		p->d=d;
		p->next=NULL;
		h->next=p;
		h=p;
		scanf("%d",&d);
	}while(d!=-9999);
	return head;
}
//初始化链表,输入 12345 打印54321
PNODE initLinklist3()
{
	PNODE head,tail;
	int d;
	head=(PNODE)malloc(sizeof(NODE));
	head->next=NULL;
	scanf("%d",&d);
	if(d==-9999)return head;
	do
	{
		tail =(PNODE)malloc(sizeof(NODE));
		tail->d=d;
		if(head->next==NULL)
		{
			head->next=tail;
			tail->next=NULL;
		}
		else
		{
			tail->next=head->next;
			head->next=tail;
		}
		scanf("%d",&d);
	}while(d!=-9999);
	return head;
}



//冒泡排序
PNODE maopaoSort(PNODE head)
{
	PNODE p1,p2;
	int temp;
	p1=head->next;
	for(;p1;p1=p1->next)
	{
		for(p2=p1->next;p2;p2=p2->next)
		{
			if(p2->d<p1->d)
			{
				temp=p2->d;
				p2->d=p1->d;
				p1->d=temp;
			}
		}
	}
	return head;
}




void deleteDuplicate(PNODE n){
	while(n)
	{
		n=n->next;
		if(n&&n->next&&n->d==n->next->d)
		{
		 n->next=n->next->next;
		}
	}
}
//前提已经排序
void deleteNoDuplicate(PNODE head)
{
	PNODE p;
	p=head->next;
	while(p)
	{
		if(p->next&&p->d==p->next->d)
		{
			p->next=p->next->next;//本应该考虑内存释放

		}
		p=p->next;

	}
}
/*
插入排序
*/

void insertSort1(PNODE head)
{
	PNODE h,p1,p2;
	if(!head->next||!head->next->next)return;
	h=head;
	p2=head->next->next;//第二个链表的起始地址
	h->next->next=NULL;//第一个节点指向NULL,链表分段
	while(p2)
	{
		p1=p2->next;
		h=head;//h归位
		while(h->next)
		{
			if(h->next->d>p2->d)
			{
				p2->next=h->next;
				h->next=p2;
				break;
			}
			else
			{
				h=h->next;
			}
		}
		if(h->next==NULL)
		{
			h->next=p2;
			p2->next=NULL;
		}
		p2=p1;//P2归位
	}

}
void main()
{
	PNODE a;
	printf("input a:\n");
	a = initLinklist3();
	printLinkList(a);
	printf("\n");
	maopaoSort(a);
	printLinkList(a);
	//deleteNoDuplicate(a);
	//printLinkList(a);
}

分享到:
评论

相关推荐

    C语言——链表的归并_c语言链表详解

    标题“C语言——链表的归并_c语言链表详解”和描述“用c语言写链表归并”明确指出了本文的主要内容:使用C语言实现链表的归并操作,并对C语言中的链表进行详细讲解。 #### 代码解析 ##### 1. 结构体定义 ```c ...

    c语言通讯录链表及文档

    总之,"c语言通讯录链表及文档"是一个实践性的项目,旨在帮助学习者巩固C语言和链表数据结构的知识,同时也提供了一个实用的通讯录管理工具。通过这个项目,你可以深入理解链表操作的实现细节,并提升你的编程技能。

    C语言链表题目(附答案).docx

    C语言链表题目详解 本资源摘要信息将详细解释C语言链表题目中的知识点,涵盖链表的建立、功能实现、指针、函数、动态结构建立等方面的知识。 一、链表的概念 链表是一种数据结构,它由多个节点组成,每个节点都...

    C语言链表学习

    C语言链表课件ppt,是你学习链表的好资料。

    通讯录管理系统数据结构C语言版链表实现实验报告.doc

    通讯录管理系统数据结构C语言版链表实现实验报告.doc

    C语言中链表的操作,总结到位!

    ### C语言中链表的基本概念及操作 #### 一、链表的概念 链表是一种常见的线性数据结构,与数组不同的是,链表中的元素不是连续...通过对链表的学习,不仅可以增强对数据结构的理解,还可以提高解决实际问题的能力。

    C语言链表实现学生信息管理

    ### 题目:C语言链表实现学生信息管理 #### 描述: 这是一个用C语言编写的简单程序,通过链表技术实现了学生信息的管理功能。用户可以通过简单的命令行界面执行各种操作,如添加、删除、修改、查询学生信息以及保存...

    C语言_链表_所有操作

    通过学习和实践这些基本操作,你可以更好地应对各种实际问题,例如实现高级数据结构(如队列、堆栈或树),或者在解决复杂算法问题时使用链表。在C语言中,链表提供了灵活性和效率,使得处理动态数据集变得更加简单...

    C语言链表学习教案.pptx

    C语言链表学习教案.pptx

    c语言双链表实现通讯录功能以及通讯录的文件读取存储

    这个项目提供了学习和实践C语言数据结构、文件操作和基本算法的机会,对于提升C语言编程能力非常有帮助。通过理解并实现这些功能,开发者可以更好地理解和应用双链表的特性,同时掌握文件系统交互的基础知识。

    C语言经典但链表,C语言经典但链表,C语言经典但链表

    链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其是C语言中扮演着核心角色。相较于数组,链表提供了更加灵活的数据存储方式。...因此,深入学习和实践链表对于提升编程技能具有重要意义。

    小型通讯录程序c语言链表实现(源代码)

    在本项目中,我们关注的是一个使用...通过这个项目,学习者可以深入理解C语言和链表数据结构,同时提升在Linux环境下的编程能力。此外,对于那些想要了解如何实现基本的桌面应用程序的人来说,这是一个很好的起点。

    C语言学习之链表ppt.zip

    C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言...

    c语言中链表的使用方法

    介绍c语言中链表的使用方法,方便使用学习

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

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

    C语言实现链表通讯录

    在本项目中,"C语言实现链表通讯录"是一个典型的C语言编程任务,...通过以上知识点的学习和实践,学生不仅可以掌握C语言和数据结构的基础,还能理解数据库操作以及软件开发的流程,这将对他们的编程技能提升大有裨益。

    C语言双向链表实现词频统计

    在本项目中,我们主要探讨如何...这个项目是学习C语言和数据结构的好实践,可以帮助我们深入理解如何利用这些基础知识解决实际问题。通过完成这个项目,不仅可以提升C语言编程技能,还能增强对数据结构和算法的理解。

    C语言 顺序链表 单链表 双链表 栈等程序

    总的来说,这个压缩包提供了一个实践C语言数据结构学习的平台,通过编写和运行这些程序,可以加深对顺序链表、单链表、双链表以及栈的理解,提升编程技能。对于初学者来说,这是一个很好的练习机会,对于经验丰富的...

    C语言之链表HuffmanTree

    总的来说,这个项目结合了C语言的基本数据结构链表和数据压缩算法哈夫曼编码,是学习和实践C语言编程、数据结构和算法的好材料。通过阅读和理解这些源码,你可以深入了解如何在C语言中实现复杂的数据处理任务,这...

    c语言基于链表的学生成绩管理系统

    这一系统可以作为学习C语言和数据结构管理的综合性实验材料,帮助学生更好地理解和掌握链表结构以及相关算法的应用。通过实践操作,学生不仅能够锻炼编程能力,还能加深对数据管理和操作系统的认识,为未来在更复杂...

Global site tag (gtag.js) - Google Analytics