zoukankan      html  css  js  c++  java
  • 数据结构(复习) -------链表

    关于链表是最基础的数据结构,,在此不再多说;;;;只贴出一些简单代码!!!!!!!!!!!!!!!!

    // 关于数据结构的总结与复习  Coding
    
    // 1.线性表
    #include <cstdio>
    #include <cstdlib>
    #define ok 1
    #define error 0
    //#define _OJ_
    
    typedef struct Lnode
    {
        int data;
        struct Lnode *next;
    } Lnode, *Linklist;
    
    Linklist
    Init_List(void)
    //对链表的建立采用正序的方式插入
    {
        int i, n;
        Linklist L, p, head;
        L = (Linklist) malloc (sizeof(Lnode));
        head = L;
        scanf("%d", &n);
    
        for (i = 0; i < n; i++) {
        p = (Linklist) malloc (sizeof(Lnode));
        scanf("%d", &p->data);
        L->next = p;
        L = p;
        }
        L->next = NULL;
    
        return head;
    }
    
    Linklist
    Merge_List(Linklist La, Linklist Lb)
    //对两个链表的合并
    {
        Linklist Lc, Pa, Pb, Pc;
        Lc = (Linklist) malloc (sizeof(Lnode));
        Pa = La->next;    Pb = Lb->next;  Pc = Lc;
        printf("合并两个链表:");
        while (Pa && Pb) {
            if(Pa->data < Pb->data){
                Pc->next = Pa;  Pc = Pc->next;  Pa = Pa->next;
            }else{
                Pc->next = Pb;  Pc = Pc->next;  Pb = Pb->next;
            }
      }
    
        Pc->next = Pa ? Pa : Pb;
        return Lc;
    }
    
    int
    List_Inster(Linklist L, int i, int e)
    //向顺序表中插入元素
    {
        int j = 0;
        Linklist p, s;
        p = L;
        printf("在位置%d插入%d", i, e);
        while (p && j < i - 1) {       //总是找到此元素的前驱
            p = p->next;    j++;
        }
    
        if(p == NULL && j == 1) {
        printf("error
    ");    return 0;
        }
    
        s = (Linklist) malloc (sizeof(Lnode));
        s->data = e;    s->next = p->next;
        p->next = s;
    }
    
    int
    List_Delete(Linklist L, int i)
    //对链表进行删除操作
    {
        int j = 0, e;
        Linklist p, q;
        p = L;
        printf("删除第%d个元素 :", i);
        while(p->next && j < i - 1) {     //前一个节点(前驱)同理j = 1时  j < i
            p = p->next;    j++;
        }
    
        if(p->next == NULL && j == 0) {
            printf("error
    ");    return 0;
        }
    
        q = p->next;    p->next = q->next;
        e = q->data;
        free(q);
    
        return e;
    }
    
    void
    print(Linklist L)
    //打印输出
    {
        Linklist p;
        p = L->next;    printf("打印链表 :");
        while (p) {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("
    ");
    }
    
    
    int main(int argc, char const *argv[]) {
    #ifndef _OJ_ //ONLINE JUDGE
           freopen("input.txt", "r", stdin);
           //freopen("output.txt", "w", stdout);
    #endif
        
        int n;
        Linklist L, p, q;
    
        L = Init_List();    p = Init_List();
    
        print(L);
    
        List_Inster(L, 2, 5);
    
        print(L);
    
        List_Delete(L, 3);
    
        print(L);
    
        q = Merge_List(L, p);
    
        print(q);
    
        return 0;
    }
    ---------------------------------------------------------------------------------------
    coding --------------------------------
    
  • 相关阅读:
    【转载】Myeclipse如何自动创建hibernate
    win7 64位mysql安装及navicat 解压版
    NuGet套件还原步骤(以vs2012为例)
    Html.DropDownListFor() 二级联动 ($.getJSON)
    ModelState验证部分属性
    asp.net mvc发送邮件
    SpringBoot的热部署
    SpringBoot 入门demo
    集群、负载均衡、微服务、分布式的概念
    SpringBoot 简介
  • 原文地址:https://www.cnblogs.com/airfand/p/5059164.html
Copyright © 2011-2022 走看看