• C语言之单链表的使用


    #include <stdio.h>
    #include <stdlib.h>
    typedef struct  LNode{
        int    data;
        struct LNode    *next;
    }LNode, *LinkList;
    void GetElem_L(LinkList L,int i,int e){
        //L为带头结点的单链表的头指针。
        //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
        LNode *p = L->next;int j = 1;
        while(p&&j<i){
            p = p->next;++j;
        }
        e = p->data;
        printf("获取的值:%d
    ",e);
        }//GetElem_L
    void ListInsert_L(LinkList L,int i,int e){
    //在带头节点的单链线性表L中第i个人位置之前插入元素e
        LinkList p = L; int j=0;
        while(p&&j<i-1){p=p->next;++j;} //寻找第i-1个节点。
        LinkList s = (LinkList)malloc(sizeof(LNode));
        s->data = e;s->next = p->next;
        p->next = s; 
        printf("插入成功。");
    }//ListInsert_L
    int ListDelete_L(LinkList L,int i,int e)
    {
        LinkList p = L;int j = 0;
        while(p->next&&j<i-1){//寻找第i个节点并令p指向其前趋
            p = p->next;  ++j; 
        }
        LNode *q = p->next; p->next = q->next;
        e = q->data; free(q);
        return e;
    }//ListDelete_L
    void CreateList_L(LinkList *L,int n){
        (*L) = (LinkList)malloc(sizeof(LNode));
        (*L)->next = NULL;  //建立一个带头结点的单链表
        for(int i = n;i>0;--i){
            LinkList p = (LinkList)malloc(sizeof(LNode));  //生成新的结点
            scanf("%d",&p->data);
            p->next = (*L)->next; (*L)->next = p; 
        } 
        printf("表格创建成功");
    }//CreateList_L
    void MergeList_L(LinkList La,LinkList Lb,LinkList Lc){
        //已知单链线性表La和Lb的元素按值非递减排列。
        //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
        LNode *pa = La->next; LNode *pb = pb->next;
        LNode *pc = Lc->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); 
    }//MergeList_L
    void main()
    {
        LinkList L;
        int n;
        printf("请输入数据的数量:
    ");
        scanf("%d",&n);
        CreateList_L(&L,n);
        printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;
    ");
        int i;
        scanf("%d",&i);
        int g=1;
        while(g==1)
        {
            if(i==1){
                int e;
                printf("请输入你们要插入的元素:
    ");
                scanf("%d",&e);
                printf("请输入你想要插入的位置:
    ");
                int k;
                scanf("%d",&k);
                ListInsert_L(L,k,e);
                printf("请选择你是否要退出还是继续:1为继续;2为退出
    ");
                g=0;
                scanf("%d",&g);
                printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;
    ");
                i=0;
                  scanf("%d",&i);
            }
            if(i==2){
                int e;
                printf("请输入你想要获取元素的位置:
    ");
                int k;
                scanf("%d",&k);
                GetElem_L(L,k,e);
                printf("请选择你是否要退出还是继续:1为继续;2为退出
    ");
                g=0;
                scanf("%d", &g);
                printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;
    ");
                i=0;
                  scanf("%d", &i);
            }    
            if(i==3){
                int e;
                printf("请输入你想要删除的位置:
    ");
                int k;
                scanf("%d",&k);
                ListDelete_L(L,k,e);
                printf("请选择你是否要退出还是继续:1为继续;2为退出
    ");
                g=0;
                scanf("%d", &g);
                printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;
    ");
                i=0;
                  scanf("%d", &i);
            }
            
        }
        return 0; 
    }
  • 相关阅读:
    CF446C [DZY loves Fibonacci]
    [BZOJ2286] 消耗战
    [CF Round #278] Tourists
    BZOJ2553 [BJWC2011]禁忌
    NOI2018D2T1 屠龙勇士
    BZOJ2333 棘手的操作
    bzoj4196: [Noi2015]软件包管理器(树链剖分)
    bzoj1833: [ZJOI2010]count 数字计数(数位DP)
    bzoj1026: [SCOI2009]windy数(数位DP)
    bzoj3631: [JLOI2014]松鼠的新家(树上差分)
  • 原文地址:https://www.cnblogs.com/chang1203/p/5925152.html
Copyright © 2020-2023  润新知