• 链表


    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);

    }

  • 相关阅读:
    C#实现函数根据返回类型重载
    自己动手实现Expression翻译器 – Part Ⅱ
    ld编译链接时默认搜索路径
    出游
    常用网络命令(转贴)
    redhat6.3企业版安装oracle11g过程
    sqlserver2000版本识别
    考IQ的推断题-生日几何?
    Microsoft Visual Studio .NET 系统必备
    101~200之间的素数
  • 原文地址:https://www.cnblogs.com/paulversion/p/7552861.html
Copyright © 2020-2023  润新知