顺序表之合并

#include<stdio.h>
#include<malloc.h>
typedef struct student
{
    char jb[6];
    char xh[15];
    int score;
}stu;
typedef struct Node
{
    stu date;
    struct Node *next;
}SLNode;

void ListInitiate(SLNode **head)//初始化
{
    *head=(SLNode *)malloc(sizeof(SLNode));
    (*head)->next=NULL;
}
int ListInsert(SLNode *head,int i,stu x)//插入
{
    SLNode *p,*q;
    int j;
    p=head;
    j=-1;
    while(p->next!=NULL && j<i-1)
    {
        p=p->next;
        j++;
    }
    if(j!=i-1)
    {
        printf("插入参数位置错误! ");
        return 0;
    }
    q=(SLNode *)malloc(sizeof(SLNode));
    q->date=x;
    q->next=p->next;
    p->next=q;
    return 1;

}
int ListLength(SLNode * head)//长度
{
    SLNode *p=head;
    int size=0;
    while(p->next!=NULL)
    {
        p=p->next;
        size++;
    }
    return size;
}
int ListDelete(SLNode *head,int i,stu *x)//删除
{
    SLNode *p,*q;
    int j;
    p=head;
    j=-1;
    while(p->next!=NULL &&p->next->next!=NULL&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(j!=i-1)
    {
        return 0;
    }
    q=p->next;
    *x=q->date;
    p->next=p->next->next;
    free(q);
    return 1;
}
int ListGet(SLNode *head,int i,stu *x)//取
{
    SLNode *p;
    int j;
    p=head;
    j=-1;
    while(p->next!=NULL &&j<i)
    {
        p=p->next;
        j++;
    }
    if(j!= i)
    {
        return 0;
    }
    *x=p->date;
    return 1;
} 

 main()
{
    SLNode *head,*head1,*head2;
    int t,n,m;
    stu s,k;
    int j=0,x=0,i=0;
    ListInitiate(&head);
    ListInitiate(&head1);
    ListInitiate(&head2);
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s%s%d",&s.jb,&s.xh,&s.score);
        ListInsert(head,ListLength(head),s);
    }
    scanf("%d",&m);
    while(m--)
    {
        scanf("%s%s%d",&s.jb,&s.xh,&s.score);
        ListInsert(head1,ListLength(head1),s);
    }

    while(j+i<ListLength(head)+ListLength(head1)&&(j<ListLength(head)&&i<ListLength(head1)))
    {
        ListGet(head,j,&s);
        ListGet(head1,i,&k);
        if(s.score>=k.score)
        {
            ListInsert(head2,x,s);
            j++;
            x++;
        }
        else
        {
            ListInsert(head2,x,k);
            i++;
            x++;
        }
    }
    if(j<ListLength(head))
        while(j<=ListLength(head)-1)
        {
            ListGet(head,j,&s);
            ListInsert(head2,x,s);
            x++;
            j++;
        }
    else if(i<ListLength(head1))
    {
        while(i<=ListLength(head1)-1)
        {
        ListGet(head1,i,&s);
            ListInsert(head2,x,s);
            x++;
            i++;
        }

    }
    for(i=0;i<ListLength(head2);i++)
    {
        ListGet(head2,i,&s);
        printf("%s %s %d\n",s.jb,s.xh,s.score);
    }

}
时间: 2024-10-31 00:04:49

顺序表之合并的相关文章

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

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

非递减顺序表的合并

//顺序表的合并 //输入元素函数 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; //

数据结构之顺序表的合并

写一个程序完成以下功能: (1)  一条记录有学号和成绩两个数据项,依次输入数据(学号,成绩): (5,60),(6,80),(7,76),(8,50),建立一个顺序表,并写一个插入函数,把以上数据写到主函数中依次调用插入函数.要求:先输入的数据排在前面,不要按学号或成绩从大到小排序. (2)  依次输出表中所有数据. (3)  写一个函数对表中所有数据按照成绩从大到小进行排序. (4)  再次输出所有数据. (5)  建立另外一个顺序表,依次输入数据:(10,70),(20,85),(30,7

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

数据结构之顺序表(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; //俗称顺序

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt

顺序表 初始化 插入 删除 查找 合并 交换 判断为空 求长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(SqList) #define MLC (Li

合并顺序表

将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C,已知顺序表A和B的的元素个数分别为m和n 思想:设定3个指针i,j,k分别指向A.B.C的首地址,然后进行A[i].B[j]的比较,A[i]>B[j],则将B[j]赋值给C[k],同时j,k自增,否则对A进行相似的操作,直到A.B中至少有一数组 元素全都赋值完成,最后将另一数组剩下的元素赋值到C尾部 #include <stdio.h> #include <stdlib.h> #define ElemType in

顺序表的查找、插入、删除、合并操作及其优缺点

顺序表的查找.插入.删除.合并操作,用c++实现相关代码: #include<iostream> using namespace std; //定义线性表顺序存储结构 #define MAXSIZE 100  //线性表最大长度 typedef struct { //线性表占用数组空间 int elem[MAXSIZE]; //记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1 int last; }SeqList; //顺序表的按内容查找运算 //在顺序表L中查找与e