#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. **插入节点**:在链表的适当位置插入新节点。根据题目描述,我们需要在输入正整数的同时排序链表,因此插入操作需要考虑排序规则。可以使用插入排序的思想,将新节点插入到已排序的...
1. 创建链表:初始化一个空链表或插入新的节点。 2. 插入节点:在链表头、尾或其他特定位置插入新节点。 3. 删除节点:根据节点值或位置删除节点。 4. 查找节点:按值或位置查找链表中的节点。 5. 遍历链表:...
2. 动态初始化:动态初始化在运行时完成,通过`new`操作符分配内存来创建头节点,并将其`next`设为`nullptr`。这种方法适用于在程序执行期间动态创建链表: ```cpp ListNode* head = new ListNode; head->data = 0; ...
1.编写一个基于链表的归并排序程序。 1)随机生成两个链表,利用随机数进行初始化 2)要求给出链表的结构,链表的初始化等排序中用到的基本操作函数 3)显示相关的输出信息 编程环境:Linux C
函数首先初始化两个指针,`first`和`tail`,分别用于指向新排序链表的头部和尾部。 - 使用一个外层循环来遍历原链表,内层循环则用于寻找当前未排序部分的最小元素。找到最小元素后,将其从原链表中移除并添加到已...
【数据结构单链表的排序与初始化、显示】 在计算机科学中,数据结构是组织和存储数据以便高效地访问和管理的重要方式。单链表是一种简单但非常实用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个...
1. **初始化**:首先,我们需要创建一个辅助函数来创建新的节点,以及一个用于处理重复元素的主函数。 2. **遍历链表**:从链表的头节点开始,遍历每个节点。我们需要两个指针,`current` 指向当前节点,`previous`...
链表在FreeRTOS中主要用于实现任务控制块的排序,这些任务控制块通过链表组织起来,可以根据优先级或其他属性进行动态排序。`vListInitialise`函数是用于初始化链表头节点的关键函数,它的作用是设置链表的初始状态...
1. **初始化**:设置两个指针,一个指向链表的头部,另一个记录当前未排序部分的尾部。 2. **遍历**:通过for循环遍历链表的未排序部分,每次比较相邻的两个节点。 3. **比较与交换**:如果前一个节点的值大于后一个...
1. 初始化链表:创建一个新的链表或清空现有的链表。 2. 插入节点:在链表的特定位置插入新的节点。 3. 删除节点:根据给定的值删除链表中的节点。 4. 显示链表:打印链表中的所有元素,便于查看和调试。 5. 排序...
知识点1:链表的定义和初始化 链表是一种基本的数据结构,它由多个节点组成,每个节点包含一个数据域和一个指向下一个节点的指针。在本算法中,我们使用一个结构体node来定义链表的节点,包括数据域data和指针next。...
1. **初始化**: `ListNode current = head;` 这行代码将 `current` 初始化为链表的头节点。 2. **循环条件**: `while (current != null && current.next != null)` 确保当前节点及其后继节点都存在,以避免空指针...
### 数据结构排序链表100题知识点梳理 #### (01) 把二元查找树转变成排序的双向链表 **题目描述** 给定一棵二元查找树(Binary Search Tree,简称BST),目标是将其转换为一个排序的双向链表。要求在转换过程中不...
1. 初始化两个指针`prev`和`cur`,`prev`指向头节点,`cur`指向`prev`的下一个节点。 2. 遍历链表,直到`cur`为空。 3. 检查`cur.val`是否等于`prev.val`。 4. 如果不相等,更新`prev.next = cur`,然后移动`prev`和...
1. **初始化:** 创建两个链表,一个为空的排序链表(`first`),另一个是待排序的原始链表(`head`)。 2. **寻找最小元素:** 遍历原始链表,找到具有最小键值的节点。这一步通常通过遍历整个链表来完成,记录下...
接下来,我们需要创建一个函数来初始化链表,并添加学生节点。例如: ```c Student* createStudent(int id, float score) { Student* newNode = (Student*)malloc(sizeof(Student)); newNode->id = id; newNode-...
1. 初始化前指针为链表头,后指针为链表尾。 2. 当前指针不等于后指针时,表示还有未排序的元素: a. 使用两个内部循环,一个从前指针开始,一个从后指针开始,相向移动。 b. 如果前指针指向的节点值大于后指针...
1. **初始化**:创建两个空链表,`first`用于存放已排序部分,`tail`用于指向下一次待插入的节点。 2. **循环遍历**:从当前链表`head`开始遍历,寻找具有最小键值的节点`min`及其前一个节点`p_min`。 3. **移动节点...
1. **初始化**:首先,创建一个空的已排序链表(head),然后遍历原链表,将每个节点视为未排序部分。 2. **插入操作**:对于每个未排序的节点,我们需要找到它在已排序链表中的正确位置。从已排序链表的头节点开始...