• 数据结构上机2单链表合并 非递减


    #include <stdio.h>
    #include <malloc.h>
    #define OK          1
    #define OVERFLOW   -1
    #define ERROR       0
    typedef int ElemType;
    typedef int Status;
    
    typedef struct LNode {
        ElemType       data;
        struct LNode * next;
    } LNode, * LinkList;
    
    void Creatlist_L(LinkList * L, int n) {
        int i;
        LinkList p;
        *L = (LinkList)malloc(sizeof(LNode));
        (*L)->next = NULL;
        for (i = n; i > 0; --i) {
            p = (LinkList)malloc(sizeof(LNode));
            scanf("%d", &(p->data));
            p->next = (*L)->next;
            (*L)->next = p;
        }
    }
    Status ListInsert_L(LinkList * L, int i, ElemType e) {
        LinkList p, s;
        int j;
        p = *L;
        j = 0;
        while (p && j < i - 1) {
            p = p->next;
            ++j;
        }
        if (!p || j > i - 1)
            return ERROR;
        s = (LinkList)malloc(sizeof(LNode));
        s->data = e;
        s->next = p->next;
        p->next = s;
        return OK;
    }
    
    Status ListDelete_L(LinkList * L, int i, ElemType * e) {
        LinkList p, q;
        int j;
        p = *L;
        j = 0;
        while(p->next && j<i-1){
            p = p->next;
            ++j;
        }
        if(!(p->next) || j>i-1)
            return ERROR;
        q = p->next;
        p->next = q->next;
        *e = q->data;
        free(q);
        return OK;
    }
    
    Status MergeList_L(LinkList * La, LinkList * Lb, LinkList *Lc) {
        LinkList pa, pb, pc;
        pa = (*La)->next;
        pb = (*Lb)->next;
        *Lc = pc = *La;
        while(pa&&pb){
            if(pa->data <= pb->data){
                pc->next = pa;
                pc = pa;
                pa = pa->next;
            }else{
                pc->next = pb;
                pc = pb;
                pb = pb->next;
            }
        }
        pc->next = pa?pa:pb;
        free(*Lb);
        return OK;
    }
    
    void Print(LinkList L) {
        LinkList p;
        p = L->next;
        while (p) {
            printf("%d    ", p->data);
            p = p->next;
        }
        printf("
    ");
    }
    
    int main(void) {
        LinkList la, lb, lc;
        int i;
        ElemType e;
    
        printf("
    -----------MergeList------------
    ");
        Creatlist_L(&la, 3);
        printf(" The la:");
        Print(la);
        Creatlist_L(&lb, 3);
        printf(" The lb:");
        Print(lb);
        MergeList_L(&la, &lb, &lc);
        printf(" The lc:");
        Print(lc);
    
        printf("
    --------INSERT-----------------
    ");
        printf("请输入要插入的位置:");
        scanf("%d", &i);
        printf("请输入要插入的数据:");
        scanf("%d", &e);
        if(ListInsert_L(&lc, i, e) != OK)
            printf("插入失败
    ");
        printf("The values of LinkList:
    ");
        Print(lc);
    
        printf("
    ---------DELETE---------------
    ");
        printf("请输入要删除的位置:");
        scanf("%d", &i);
        if(ListDelete_L(&lc, i, &e) != OK)
            printf("删除失败
    ");
        printf("The values of LinkList:
    ");
        Print(lc);
    
        
        return 0;
    }

     

  • 相关阅读:
    酒香也怕巷子深,谈谈前端简历书写技巧。
    谈谈自己对语义化的认识
    服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)
    Python常用库大全
    Python七大原则,24种设计模式
    Python设计模式(4):行为型
    Python设计模式(3):结构型
    Python设计模式(2):创建型
    python设计模式
    数据库的优化
  • 原文地址:https://www.cnblogs.com/startnow/p/5052595.html
Copyright © 2020-2023  润新知