首页 > 其他分享 >数据结构实验1

数据结构实验1

时间:2025-01-10 16:58:10浏览次数:1  
标签:Node tempA NULL temp value next 实验 数据结构

7-1 线性表A,B顺序存储合并
有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型

输入格式:
第一行输入输入表A的各个元素,以-1结束,中间用空格分隔;第二行输入表B的各个元素,以-1结束,中间用空格分隔。

输出格式:
输出结果为表C的非递减有序序列,中间用英文逗号分隔

输入样例:
在这里给出一组输入。例如:

9 8 7 -1
10 9 8 4 3 -1
输出样例:
在这里给出相应的输出。例如:

3,4,7,8,9,10

代码:
`#include<stdio.h>

include<stdlib.h>

//定义链表节点结构
typedef struct Node{
int value;
struct Node *next;
}Node;

//创建一个新的链表节点
Node* createNode(int value){
Node* newNode=(Node*)malloc(sizeof(Node));
newNode->value=value;
newNode->next=NULL;
return newNode;
}

//尾插法
void append(Node** head,int value){
Node* newNode=createNode(value);
if(head==NULL){
head=newNode;
}
else{
Node
temp=
head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=newNode;
}
}

//检查链表中是否包含某个值
int contains(Nodehead,int value){
Node
temp=head;
while(temp!=NULL){
if(temp->value==value){
return 1; //表示已经包含该值
}
temp=temp->next;
}
return 0; //表示不包含该值
}

//合并两个链表并删除重复元素
void m(NodeheadA,NodeheadB,Node headC){
Node
tempA=headA;
Node
tempB=headB;

//合并
while(tempA!=NULL&&tempB!=NULL){
    if(tempA->value<tempB->value){
        if(!contains(*headC,tempA->value)){
            append(headC,tempA->value);
        }
        tempA=tempA->next;
    }
    else if(tempA->value>tempB->value){
        if(!contains(*headC,tempB->value)){
            append(headC,tempB->value);
        }
        tempB=tempB->next;
    }
    else{
        //如果相同,只添加一个
        if(!contains(*headC,tempA->value)){
            append(headC,tempA->value);
        }
        tempA=tempA->next;
        tempB=tempB->next;
    }
}

//处理剩余的A链表
while(tempA!=NULL){
    if(!contains(*headC,tempB->value)){
        append(headC,tempA->value);
    }
    tempA=tempA->next;
}

//处理剩余的B链表
while(tempB!=NULL){
    if(!contains(*headC,tempB->value)){
        append(headC,tempB->value);
    }
    tempB=tempB->next;
}
    }

//排序
void sortlist(Node**head){
if(head==NULL||(head)->nextNULL){
return;
}
Nodesorted=NULL;
Node
current=head;
while(current!=NULL){
Node
next=current->next;
if(sorted
NULL||sorted->value>=current->value){
current->next=sorted;
sorted=current;
}
else{
Node*temp=sorted;
while(temp->next!=NULL&&temp->next->valuevalue){
temp=temp->next;
}
current->next=temp->next;
temp->next=current;
}
current=next;
}
*head=sorted;
}

//输出链表
void printlist(Node* head){
Node* temp=head;
int first=1;
while(temp!=NULL){
if(!first){
printf(",");
}
printf("%d",temp->value);
first=0;
temp=temp->next;
}
printf("\n");
}
int main(){
Node* headA=NULL;
Node* headB=NULL;
Node* headC=NULL;
int value;
while(scanf("%d",&value)&&value!=-1){
append(&headA,value);
}
while(scanf("%d",&value)&&value!=-1){
append(&headB,value);
}
m(headA,headB,&headC);
sortlist(&headC);
printlist(headC);
return 0;
}`

标签:Node,tempA,NULL,temp,value,next,实验,数据结构
From: https://www.cnblogs.com/LiuHuWei/p/18664241

相关文章

  • uml实验五
    部署视图模型建模班级:信2305-3学号:20234316姓名:徐戌一实验目的 了解系统物理体系结构模型和表示方法; 了解部署图的概念及其在系统设计中的作用; 掌握使用RationalRose绘制部署图的方法;二实验环境及实验准备 所需硬件环境为微机; 所需软件环境为Ra......
  • 数据结构实验二
    石家庄铁道大学实验报告课程名称:信2305-3 任课教师:刘丹 实验日期:2024.12.11班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验二一、 实验目的1.掌握栈的定义及......
  • 数据结构实验一
    石家庄铁道大学实验报告课程名称:数据结构与算法设计 任课教师:刘丹 实验日期:2024.12.11班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验一一、 实验目的掌握顺序表的......
  • 数据结构实验2
    7-2双向循环链表应用已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。输入格式:第一行输入元素个数,第二行输入元素值,第三行输入要交换的元素值,第四行输出结果。输出格式:输出交换后的结果,中间不用空格分......
  • 数据结构实验三
    石家庄铁道大学实验报告课程名称:信2305-3 任课教师:刘丹 实验日期:2024.12.15班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验三一、 实验目的1.掌握二叉树的定......
  • 数据结构实验五
    石家庄铁道大学实验报告课程名称:数据结构与算法设计 任课教师:刘丹 实验日期:2024.12.15班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验五一、 实验目的1.掌握散列表......
  • 数据结构实验3
    7-3修改数组(蓝桥杯)给定一个长度为N的数组A=[A1,A2,⋅⋅⋅AN],数组中有可能有重复出现的整数。现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改A2,A3,⋅⋅⋅,AN。当修改Ai时,小明会检查Ai是否在A1∼Ai−1中出现过。如果出现过,则小明会给Ai加上......
  • 数据结构实验四
    石家庄铁道大学实验报告课程名称:信2305-3 任课教师:刘丹 实验日期:2024.12.15班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验四一、 实验目的1)掌握图的邻接矩......
  • 数据结构实验4
    7-2栈实现表达式求值使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。输入格式:输入正确的表达式(可以有空格)后回车,得到后缀表达式和结果。输入括号缺失的表达式,输出"ERR......
  • 数据结构实验六
    石家庄铁道大学实验报告课程名称:数据结构与算法设计 任课教师:刘丹 实验日期:2024.12.15班级:信2305-3 姓名:徐戌 学号:20234316实验项目名称:实验六一、 实验目的1.掌握插入排......