数据结构之顺序表的合并

写一个程序完成以下功能:

(1)  一条记录有学号和成绩两个数据项,依次输入数据(学号,成绩): (5,60),(6,80),(7,76),(8,50),建立一个顺序表,并写一个插入函数,把以上数据写到主函数中依次调用插入函数。要求:先输入的数据排在前面,不要按学号或成绩从大到小排序。

(2)  依次输出表中所有数据。

(3)  写一个函数对表中所有数据按照成绩从大到小进行排序。

(4)  再次输出所有数据。

(5)  建立另外一个顺序表,依次输入数据:(10,70),(20,85),(30,75), (40,90),并且按照(3)写好的函数对该顺序表进行排序。

(6)  写一个函数合并以上两个有序表,使得合并之后的表是有序的(从大到小)。即实现函数 merge(SqList *A, SqList *B, SqList *C),把A,B两个有序表合并在表C中去。并且最好不用二重循环实现算法,也不用重新调用排序函数。

#include "stdio.h"
#define MAXSIZE 100
typedef struct
{
    int NO;
    int score;
}ElemType;
typedef struct
{
    ElemType elem[MAXSIZE];
    int length;
}SqList;

//初始化
void InitList(SqList *pL)
{
    pL->length =0;
}

//插入
void InsertList(SqList *pL,ElemType e,int i)
{
    if(pL->length >MAXSIZE)
        return;
    pL->elem [i]=e;
    pL->length ++;
}

//排序
void  SortScore(SqList *pL)
{
    for(int i=0;i<pL->length ;i++)
        for(int j=i+1;j<pL->length ;j++)
        {
            if(pL->elem [i].score<pL->elem [j].score )
            {
                ElemType temp=pL->elem [i];
                pL->elem [i]=pL->elem [j];
                pL->elem [j]=temp;
            }
        }
}

void Merge(SqList *pL,SqList *pS,SqList *T)
{
    int i=0,j=0,k=0;
    while(i<pL->length &&j<pS->length )
    {
        if(pL->elem [i].score >pS->elem [j].score )
            T->elem [k++]=pL->elem [i++];

        else

            T->elem [k++]=pS->elem [j++];

    }
    while(i<pL->length )
        T->elem [k ++]=pL->elem [i++ ];

    while(j<pS->length )
        T->elem [k ++]=pS->elem [j ++];

}

//输出
void Printf(SqList *pL)
{
    for(int i=0;i<pL->length ;i++)
        printf("(%2d,%2d)\n",pL->elem [i].NO ,pL->elem [i].score );
}

void main()
{
    SqList L,S,T;
    ElemType e;
    InitList(&L);
    e.NO =5; e.score =60;
    InsertList(&L,e,0);
    e.NO =6; e.score =80;
    InsertList(&L,e,1);
    e.NO =7; e.score =76;
    InsertList(&L,e,2);
    e.NO =8; e.score =50;
    InsertList(&L,e,3);
    printf("顺序表L:\n");
    Printf(&L);
    printf("\n按照成绩大小排序后的顺序表L:\n");
    SortScore(&L);
    Printf(&L);

    InitList(&S);
    e.NO =10; e.score =70;
    InsertList(&S,e,0);
    e.NO =20; e.score =85;
    InsertList(&S,e,1);
    e.NO =30; e.score =75;
    InsertList(&S,e,2);
    e.NO =40; e.score =90;
    InsertList(&S,e,3);
    printf("\n顺序表S:\n");
    Printf(&S);
    printf("\n按照成绩大小排序后的顺序表S:\n");
    SortScore(&S);
    Printf(&S);

    printf("\n\n");

    InitList(&T);
    T.length =L.length +S.length ;
    Merge(&L,&S,&T);
    Printf(&T);

}
时间: 2024-10-07 05:31:25

数据结构之顺序表的合并的相关文章

基础数据结构-线性表-顺序表的合并操作

因为最近笔记本B面裂了准备去修,复杂些的会优先加上注释,所以在家先把代码和题目贴上来以后补文字,有疑问可以在下面留言. 顺序表的合并操作 题目描述建立顺序表的类,属性包括:数组.实际长度.最大长度(设定为1000) 已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序输入第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等 第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等输出顺序表内容包括顺序表的实际长度和数

数据结构。顺序表

#include <stdio.h>#include <stdlib.h> #define LIST_INIT_SIZE 100#define LIST_INCREMENT 10typedef struct Point   //element type{    int x;    int y;}Point;typedef Point ElemType;typedef struct          //list type{    ElemType *elem;     //data

非递减顺序表的合并

//顺序表的合并 //输入元素函数 put //输出元素函数 output //合并 Merge #include<stdio.h> #include<stdlib.h> #include<algorithm> using namespace std; #define LIST_INIT_SIZE 80 #define LISTINCREMENT 10 typedef struct { int *elem; int length; //有效长度 int size; //

Windows 已在 数据结构_顺序表.exe 中触发一个断点——new和delete注意事项

实现数据结构的顺序表的类时,输入,改,删,查都可以,但是最后析构函数时持续出错 错误提示"Windows 已在 数据结构_顺序表.exe 中触发一个断点" int *elem=new int(LIST_INIT_SIZE); if(!elem)cout<<"overflow"<<endl; if(leng>LIST_INIT_SIZE) cout<<"error"; else {    length=le

数据结构之顺序表(C++版)

#include <iostream>#include <stdlib.h>#define MAXLISTSIZE 100 //预设的存储空间最大容量 using namespace std; typedef string ElemType;typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //允许的最大存储容量(以sizeof(ElemType)为单位)}SqList; //俗称顺序

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

数据结构学习---顺序表

在准备考研的时候就想发学习笔记,想来已经过了多时.现在在培训班又要展开学习,说明一件事:408是指导学习研究计算机的基础!对于编写程序而言,数据结构与算法,是关键!我想其他的组成原理,计算机网络,操作系统也很重要,这是一个system,有必要有需要学习认真的学习之.希望这个是好的开始! ---------------------------------------------------------------- 昨天晚上看浙大在网易云课上的视频,没有上过浙大的我还是非常激动,哈哈,三个短视频看

数据结构之顺序表

好不容易linux的课程结束了,下面就进入了数据结构的课程,对于没学过这本书的我,只能弱弱的说一句,数据结构真的好难,在学习的过程中,觉得最经典的一句话便是,数据结构+算法=程序.我只想说理解数据结构真的好难,太富有逻辑性了,有时候真的还需要发挥自己的空间想象能力,几天的学习,其实还算可以吧,下面我就给大家写一点线性表的基本操作吧,我尽可能的讲解的清楚一些,方便看的人有兴趣能有自己实现. #include <stdio.h> #include <stdlib.h> #include

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一