将非递减的A表和B表合并为C表,且C表也是非递减的

第一种:顺序表

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20

typedef struct{
    int data[MAXSIZE];
    int len;
}SqList;

SqList * initSqList(){
    SqList * L;
    L = (SqList *)malloc(sizeof(SqList));
    L->len = 0;
    return L;
}

void createSqList(SqList * L){
    int n;
    printf("please input the length of the list!\n");
    scanf("%d",&n);
    printf("please input the values of the list!\n");
    for(int i=1;i<=n;i++){
        scanf("%d",&L->data[i]);
    }
    L->len = n;
}

int insertSqList(SqList * L,int i,int e){
    if(i<1 || i>L->len+1){
        printf("error!\n");
        return -1;
    }else{
        for(int j=L->len;j>=i;j--){
            L->data[j+1] = L->data[j];
        }
        L->data[i] = e;
        L->len++;
        return 0;
    }
}

int deleteSqList(SqList * L,int i){
    if(i<1 || i>L->len){
        printf("error!\n");
        return -1;
    }else{
        for(int j=i;j<=L->len;j++){
            L->data[j] = L->data[j+1];
        }
        L->len--;
        return 0;
    }
}

void print(SqList * L){
    for(int i=1;i<=L->len;i++){
        printf("%4d",L->data[i]);
    }
    printf("\n");
}

int main(){

    SqList * La;
    SqList * Lb;
    SqList * Lc;
    int i=1;
    int j=1;
    int k=1;
//  int tempa;
//  int tempaa;

    La = initSqList();
    Lb = initSqList();

    printf("create La!\n");
    createSqList(La);
    printf("\nLa:\n");
    print(La);
    printf("after insert:\n");

//插入和删除的验证代码
/*  tempa = insertSqList(La,3,67);
    if(tempa == -1){
        printf("insert error!\n");
    }else{
        print(La);
    }

    printf("after delete:\n");
    tempa = deleteSqList(La,2);
    if(tempaa == -1){
        printf("delete error!\n");
    }else{
        print(La);
    }
*/
    printf("create Lb!\n");
    createSqList(Lb);
    printf("\nLb:\n");
    print(Lb);

    if(La->len + Lb->len > MAXSIZE-1){
        printf("error!\n");
    }else{
        Lc = initSqList();
        while(i<=La->len && j<=Lb->len){
            if(La->data[i] <= Lb->data[j]){
                insertSqList(Lc,k,La->data[i]);
                k++;
                i++;
            }else{
                insertSqList(Lc,k,Lb->data[j]);
                k++;
                j++;
            }
        }

        while(i<=La->len){
            insertSqList(Lc,k,La->data[i]);
            k++;
            i++;
        }
        while(j<=Lb->len){
            insertSqList(Lc,k,Lb->data[j]);
            k++;
            j++;
        }
        printf("after combination!\n");
        printf("Lc:\n");
        print(Lc);
    }
    return 0;
}

第二种:链表

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    char data;
    struct node * next;
}Linklist;

//头插入法:
Linklist * createLinklist1(){
    Linklist * head,* p;
    char x;
    head = (Linklist *)malloc(sizeof(Linklist));
    head->next = NULL;
    printf("please input data!\n");
    scanf("%c",&x);
    while(x != ‘\n‘){
        p = (Linklist *)malloc(sizeof(Linklist));
        p->data = x;
        p->next = head->next;
        head->next = p;
        scanf("%c",&x);
    }
    return head;
}

//尾插入法
Linklist * createLinklist2(){
    char x;
    Linklist * head,* p,* q;
    head = (Linklist *)malloc(sizeof(Linklist));
    head->next = NULL;
    q = head;
    printf("please input the values of the list!\n");
    scanf("%c",&x);
    while(x != ‘\n‘){
        p = (Linklist *)malloc(sizeof(Linklist));
        p->data = x;
        p->next = NULL;
        q->next = p;
        q = p;
        scanf("%c",&x);
    }
    return head;
}

//插入
int insertLinklist(Linklist * head,int i,char e){
    int j=0;
    Linklist * p, * q;

    p = head;
    while(p != NULL && j<(i-1)){
        p = p->next;
        j++;
    }
    if(p == NULL){
        printf("the location is not valid!\n");
        return -1;
    }else{
        q = (Linklist *)malloc(sizeof(Linklist));
        q->data = e;
        q->next = p->next;
        p->next = q;
        return 0;
    }
}

//删除
int deleteLinklist(Linklist * head,int i){
    int j=0;
    Linklist * p, * q;
    p = head;
    while(p != NULL && j<(i-1)){
        p = p->next;
        j++;
    }
    if(p == NULL){
        printf("the location is not valid!\n");
        return -1;
    }else if(p->next == NULL){
        printf("the node doesn‘t exist!\n");
        return -1;
    }else{
        q = p->next;
        p->next = q->next;
        free(q);
        return 0;
    }
}

//打印
void print(Linklist * head){
    Linklist * p;
    p = head->next;
    while(p != NULL){
        printf("%2c",p->data);
        p = p->next;
    }
    printf("\n");
}

int main(){
    Linklist * La;
    Linklist * Lb;
    Linklist * Lc;
//  int temp;
//  int tempa;
    int k = 1;
    Linklist * pa;
    Linklist * pb;
    Linklist * pc;
    int t1;

    printf("create La!\n");
    La = createLinklist2();
    printf("\nLa:\n");
    print(La);

    printf("\n");

//插入和删除的验证代码
/*  printf("after insert:\n");
    temp = insertLinklist(La,1,‘8‘);
    if(temp == -1){
        printf("error!\n");
    }else{
        printf("\nLa:\n");
        print(La);
    }

    printf("\n");

    printf("after delete:\n");
    tempa = deleteLinklist(La,5);
    if(tempa == -1){
        printf("error!\n");
    }else{
        printf("\nLa:\n");
        print(La);
    }
*/
    printf("create Lb!\n");
    Lb = createLinklist2();
    printf("\nLb:\n");
    print(Lb);

    Lc = (Linklist *)malloc(sizeof(Linklist));
    Lc->next = NULL;
    pa = La->next;
    pb = Lb->next;
    pc = Lc;

//合并
    while(pa != NULL && pb != NULL){
        if(pa->data <= pb->data){
            t1 = insertLinklist(Lc,k,pa->data);
            pc = pc->next;
            pa = pa->next;
            k++;
        }else{
            t1 = insertLinklist(Lc,k,pb->data);
            pc = pc->next;
            pb = pb->next;
            k++;
        }
    }

    while(pa != NULL){
        t1 = insertLinklist(Lc,k,pa->data);
        pc = pc->next;
        pa = pa->next;
        k++;
    }
    while(pb != NULL){
        t1 = insertLinklist(Lc,k,pb->data);
        pc = pc->next;
        pb = pb->next;
        k++;
    }

    printf("\nLc:\n");
    print(Lc);
    return 0;
}
时间: 2024-08-08 01:09:33

将非递减的A表和B表合并为C表,且C表也是非递减的的相关文章

MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理 MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案 上一章介绍了,如何建数据层和业务,以及各层之间的引用过关系 这章主要讲解怎么使用业务层的方法. 以及普遍遇到的EF关联查询的问题解决方案 1.在FytMsys.Web文件夹下建Fyt

03: 数据导入导出 、 表记录基本操作 、 查询及匹配条件 、 多表查询

day03一数据导入二数据导出三管理表记录 *3.1 插入表记录3.2 查询表记录 (单表 多表 嵌套 连接)3.3 条件匹配3.4 更新表记录字段的值3.5 删除表记录++++++++++++++++++++++++++++++++一数据导入 : 把系统文件的内容存储到数据库的表里.把系统已有的用户信息存储到studb.user表/etc/passwd用户名 密码站位符 uid gid 描述信息 家目录 shell create database studb;create table stud

数据库表的查询操作(实验二),数据库表查询实验

[实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:掌握利用Select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等.[实验内容]一.单表查询1.简单查询打开查询分析器,根建立teacher表,并加入数据.从teacher表中分别检索出教师的所有信息,以及仅查询教工号.姓名和职称.语句如下: select * from teacher select tno, tname from teacher 如要查询时改变列标题的显示,则从te

sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”

当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项.如果要去掉此提示,可从“工具”菜单中选择“选项”,在“选项”对话框中,选Designers,选择“表设计器和数据库设计器”,清除“ 阻止保存要求重新创建表的更改”复选框. 转载请注明出处:http://www.cnb

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 扩展 iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html iptables限制syn速率 http://www.aminglinux.com/bbs/thre

oracle创建表之前判断表是否存在,如果存在则删除已有表

Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) NOT NULL COMMENT '编号', parent_id varchar(64) NOT NULL COMMENT '父级编号', parent_ids varchar(2000) NOT NULL COMMENT '所有父级编号', name varchar(100) NOT NULL C

【Access2007】将Excel表导入至Access2007的其中一张已存在的表之中

将Excel表导入至Access2007,你会发现万恶的Access2007会帮你自动创建一张表,完全没有问你是否要插入一张已存在的表之中. 那么,我们需要这样解决: 一.按照正常的步骤先将Excel表导入至Access2007 1.选择标签栏上的"外部数据"->excel 2.弹出的对话框中的指定数据源选择要导入的excel文件,点击"确定" 3.选择要导入的工作表点下一步 4.看此表是否第一列包含表头,一般都包含的,把第一行包含列标题勾上,点下一步,再点下

mysql建立表及表的简单操作-插入数据-删除主键-删除表-修改表的数据-删除表的数据

-- 1.使用数据库 USE ren; -- 2.建立student表 CREATE TABLE student ( sid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,   -- UNSIGNED(无符号) AUTO_INCREMENT(自增) sname VARCHAR(10),    -- 只能保存10个字符 saddress VARCHAR(15)   -- 只能保存15个字符 )ENGINE=MYISAM DEFAULT CHARSET=utf8;

5-5-广义表(头尾链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(头尾链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c    

mysql如果在使用多表连查时,两张或多张表出现相同的字段名的解决办法

多表查询时,mysql语句为: select a.*,b.* from 表A名 as a left join 表B名 as b on a.字段名=b.字段名; 当出现两个相同字段名字时,比如相同字段名为name,就可以a.name as aname,b,name as bname; 语句为: select a.name as aname,b.name as bname from as a left join 表B名 as b on a.字段名=b.字段名; mysql如果在使用多表连查时,两张或