zoukankan      html  css  js  c++  java
  • 链表

    function.h 头文件

    typedef struct LNode {

    struct LNode *next;
    int data;

    }LNode,*LinkList;//*LinkList等价于typedef int* p;p为指向int类型的指针

    typedef int Status;

    //初始化链表
    Status InitLinkList(LinkList List, int n);

    //输出链表中的所有元素
    Status OutputLinkList(LinkList List);

    //获取某个下标的元素
    Status GetElem_L(LinkList L,int i,int *e);
    //在链表中插入元素
    Status ListInsert_L(LinkList L, int i, int e);
    //删除某个元素
    Status ListDelete_L(LinkList L,int i,int *e);
    //合并两个链表并非递减排序
    Status MerageList_L(LinkList L1,LinkList L2,LinkList L3);

    //realize.c文件内容

    #include "function.h"
    #include "stdio.h"
    #include "stdlib.h"
    #define OK 1
    #define ERROR 0;


    //初始化链表
    Status InitLinkList(LinkList List, int n) {

    List->next = NULL;

    LNode *p;

    for (int i = 0; i < n; i++)
    {
    p = (LNode *)malloc(sizeof(LNode));

    scanf("%d",&p->data);

    p->next =List->next;

    //在头结点后面插入元素

    List->next = p;
    }

    }
    //获取链表的第i个元素
    Status GetElem_L(LinkList L, int i, int *e) {

    LinkList p;

    p = L->next; int j = 1;
    while (p&&j<i)
    {
    p = p->next;
    j++;
    }
    if (!p || j > i) return ERROR;


    *e = p->data;

    return OK;


    }

    Status ListInsert_L(LinkList L, int i, int e) {

    LinkList p,node;

    p = L; int j = 0;
    while (p&&j<i-1)
    {
    p = p->next;
    j++;
    }
    if (!p || j > i) return ERROR;

    node = (LinkList)malloc(sizeof(node));

    node->data = e;
    node->next = p->next;
    p->next = node;

    return OK;

    }

    Status ListDelete_L(LinkList L, int i,int *e) {

    LinkList p = L;
    int j = 0;
    while (p->next&&j<i-1)
    {
    p = p->next;
    j++;
    }
    if (!p->next || j > i - 1)return ERROR;
    *e = p->data;
    p->next = p->next->next;
    p->data = p->next->data;

    return OK;


    }

    Status MerageList_L(LinkList L1, LinkList L2, LinkList L3) {

    LinkList pa, pb, pc ;
    L3 = pc = pa;
    while (pa&&pb)
    {
    if (pa->data <= pb->data) {
    pc->next = pa;
    pc = pa;
    pa = pa->next;
    }
    else
    {
    pc->next = pb;
    pc = pb;
    pa = pb->next;

    }

    }

    pc->next = pa ? pa : pb;

    }

    //输出链表中的元素值
    Status OutputLinkList(LinkList List) {

    LinkList L;

    L = List->next;
    printf("输出元素的值为 ");

    while (L)
    {
    printf("%d ",L->data);
    L = L->next;

    }

    }

    LinkList.c

    #include "stdlib.h"
    #include "stdio.h"
    #include "function.h"
    #define N 5

    void main() {

    LNode L,L1,L2,L3;
    int i=0, e=0;

    InitLinkList(&L,N);

    printf("输入要获取第几个元素 ");
    scanf("%d",&i);

    //获取元素
    GetElem_L(&L,i, &e);

    printf("获取的元素的值%d ",e);

    printf("请输入要插入元素的位置 ");

    scanf("%d",&i);
    printf("请输入插入元素的值 ");

    scanf("%d",&e);

    //在第i个位置插入元素
    ListInsert_L(&L, i, e);//时间复杂度为O(n)


    OutputLinkList(&L);
    //删除第i个元素
    printf("请输入要删除的元素 ");
    scanf("%d",&i);

    ListDelete_L(&L, i, &e);//时间复杂度为O(n)

    printf("删除元素的值为%d ",e);

    MerageList_L(&L1, &L2, &L3);

    OutputLinkList(&L);

    }

  • 相关阅读:
    struts2-Action配置-通配符-DMI
    struts2中struts.xml和web.xml文件解析及工作原理
    IntelliJ IDEA 的Project structure说明
    深入理解乐观锁与悲观锁
    共享锁(S锁)和排它锁(X锁)
    乐观锁和悲观锁
    事务并发的可能问题与其解决方案
    Ehcache配置详解及CacheManager使用
    Hibernate一级缓存、二级缓存以及查询缓存的关系
    【转】Spring 的下载、安装和使用
  • 原文地址:https://www.cnblogs.com/paulversion/p/7552861.html
Copyright © 2011-2022 走看看