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

动态初始化排序链表

阅读更多
#include "stdio.h"
#include "stdlib.h"
typedef int DataType;

/*编一C程序,它能读入集合A的一串整数(以-9999为结束标记,-9999不算在内)和集合B的一串整数(以-9999为结束标记),
计算出A与B的交集,并以由小到大的次序输出A与B的交集中的所有整数
(输入整数时,相邻的两个用空格隔开。为A或B输入时,同一个数可能出现多次,而A与B的交集中同一个数不能出现多次)。*/
typedef struct link
{
	DataType d;
	struct link *next;
}Linklist,*PLink;

void printLink(PLink h)
{
	PLink p;
	int count=0;
	if(h==NULL)return;
	p=h->next;
	while(p)
	{
		printf("%-5d",p->d);
		if(++count%10==0)printf("\n");
		p=p->next;
	}
}
//插入排序 输入两个整数集合

void insertData(PLink h,int x)
{
	PLink p,pre,q;
	pre=h;
	p=pre->next;
	while(p&&p->d<x)
	{
		pre=pre->next;
		p=pre->next;
	}
	q=(PLink)malloc(sizeof(Linklist));
	q->d=x;

	q->next=p;
	pre->next=q;

//	printLink(h);
//	printf("\n");
}
void inputData(PLink *h)
{
	int d;
	if(*h==NULL)
	{
		*h=(PLink)malloc(sizeof(Linklist));
		(*h)->next=NULL;
	}
	printf("input a:\n");
	do
	{
		scanf("%d",&d);
		if(d==-9999)break;

		insertData(*h,d);
	}while(9);
	printf("input b:\n");
	do
	{
		scanf("%d",&d);
		if(d==-9999)break;

		insertData(*h,d);
	}while(9);
}
//链表有序前提删除重复元素
void deleteReputNode(PLink h)
{
	PLink p,f;
	f=h;
	p=h->next;
	while(p&&p->next)
	{
		if(p->d==p->next->d)
		{
			f->next=p->next;
			free(p);
			p=f->next;
			continue;
		}
		f=p;
		p=p->next;
	}
}
void main()
{
	PLink a=NULL;
	inputData(&a);
	printLink(a);
	deleteReputNode(a);
	printf("\n");
	printLink(a);

}
分享到:
评论

相关推荐

    动态链表的建立及排序

    // 初始化指针为NULL ``` 3. **插入节点**:在链表的适当位置插入新节点。根据题目描述,我们需要在输入正整数的同时排序链表,因此插入操作需要考虑排序规则。可以使用插入排序的思想,将新节点插入到已排序的...

    c++基于链表的操作及排序

    1. 创建链表:初始化一个空链表或插入新的节点。 2. 插入节点:在链表头、尾或其他特定位置插入新节点。 3. 删除节点:根据节点值或位置删除节点。 4. 查找节点:按值或位置查找链表中的节点。 5. 遍历链表:...

    数据结构单链表初始化c/c++语言代码实现

    2. 动态初始化:动态初始化在运行时完成,通过`new`操作符分配内存来创建头节点,并将其`next`设为`nullptr`。这种方法适用于在程序执行期间动态创建链表: ```cpp ListNode* head = new ListNode; head-&gt;data = 0; ...

    一个基于链表的归并排序程序

    1.编写一个基于链表的归并排序程序。 1)随机生成两个链表,利用随机数进行初始化 2)要求给出链表的结构,链表的初始化等排序中用到的基本操作函数 3)显示相关的输出信息 编程环境:Linux C

    链表的多种排序方法(word)

    函数首先初始化两个指针,`first`和`tail`,分别用于指向新排序链表的头部和尾部。 - 使用一个外层循环来遍历原链表,内层循环则用于寻找当前未排序部分的最小元素。找到最小元素后,将其从原链表中移除并添加到已...

    数据结构单链表的排序与初始化、显示

    【数据结构单链表的排序与初始化、显示】 在计算机科学中,数据结构是组织和存储数据以便高效地访问和管理的重要方式。单链表是一种简单但非常实用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个...

    c语言链表的基本操作之删除排序链表中的重复元素.zip

    1. **初始化**:首先,我们需要创建一个辅助函数来创建新的节点,以及一个用于处理重复元素的主函数。 2. **遍历链表**:从链表的头节点开始,遍历每个节点。我们需要两个指针,`current` 指向当前节点,`previous`...

    002-FreeRTOS202212-4001-链表头节点(根节点)初始化

    链表在FreeRTOS中主要用于实现任务控制块的排序,这些任务控制块通过链表组织起来,可以根据优先级或其他属性进行动态排序。`vListInitialise`函数是用于初始化链表头节点的关键函数,它的作用是设置链表的初始状态...

    2020_06_11 for循环冒泡排序链表.rar

    1. **初始化**:设置两个指针,一个指向链表的头部,另一个记录当前未排序部分的尾部。 2. **遍历**:通过for循环遍历链表的未排序部分,每次比较相邻的两个节点。 3. **比较与交换**:如果前一个节点的值大于后一个...

    C语言链表排序

    1. 初始化链表:创建一个新的链表或清空现有的链表。 2. 插入节点:在链表的特定位置插入新的节点。 3. 删除节点:根据给定的值删除链表中的节点。 4. 显示链表:打印链表中的所有元素,便于查看和调试。 5. 排序...

    高效率多排序链表的合并算法,每次合并N个符合条件的结点,面对海量数据比传统新建表或逐个合并结点的效率要高很多,但算法相对复杂

    知识点1:链表的定义和初始化 链表是一种基本的数据结构,它由多个节点组成,每个节点包含一个数据域和一个指向下一个节点的指针。在本算法中,我们使用一个结构体node来定义链表的节点,包括数据域data和指针next。...

    删除排序链表中的重复元素(java代码).docx

    1. **初始化**: `ListNode current = head;` 这行代码将 `current` 初始化为链表的头节点。 2. **循环条件**: `while (current != null && current.next != null)` 确保当前节点及其后继节点都存在,以避免空指针...

    数据结构排序链表100题.doc

    ### 数据结构排序链表100题知识点梳理 #### (01) 把二元查找树转变成排序的双向链表 **题目描述** 给定一棵二元查找树(Binary Search Tree,简称BST),目标是将其转换为一个排序的双向链表。要求在转换过程中不...

    java-leetcode题解之第83题删除排序链表中的重复元素.zip

    1. 初始化两个指针`prev`和`cur`,`prev`指向头节点,`cur`指向`prev`的下一个节点。 2. 遍历链表,直到`cur`为空。 3. 检查`cur.val`是否等于`prev.val`。 4. 如果不相等,更新`prev.next = cur`,然后移动`prev`和...

    c语言链表排序

    1. **初始化:** 创建两个链表,一个为空的排序链表(`first`),另一个是待排序的原始链表(`head`)。 2. **寻找最小元素:** 遍历原始链表,找到具有最小键值的节点。这一步通常通过遍历整个链表来完成,记录下...

    c_sort_list.rar_c_sort_list_c语言 排序 链表_list sort_结构体 排序

    接下来,我们需要创建一个函数来初始化链表,并添加学生节点。例如: ```c Student* createStudent(int id, float score) { Student* newNode = (Student*)malloc(sizeof(Student)); newNode-&gt;id = id; newNode-...

    双向起泡排序法 双向链表 排序

    1. 初始化前指针为链表头,后指针为链表尾。 2. 当前指针不等于后指针时,表示还有未排序的元素: a. 使用两个内部循环,一个从前指针开始,一个从后指针开始,相向移动。 b. 如果前指针指向的节点值大于后指针...

    C语言结构体链表的排序方法汇总

    1. **初始化**:创建两个空链表,`first`用于存放已排序部分,`tail`用于指向下一次待插入的节点。 2. **循环遍历**:从当前链表`head`开始遍历,寻找具有最小键值的节点`min`及其前一个节点`p_min`。 3. **移动节点...

    简单的单链表排序 —— 学生管理程序

    1. **初始化**:首先,创建一个空的已排序链表(head),然后遍历原链表,将每个节点视为未排序部分。 2. **插入操作**:对于每个未排序的节点,我们需要找到它在已排序链表中的正确位置。从已排序链表的头节点开始...

Global site tag (gtag.js) - Google Analytics