zoukankan      html  css  js  c++  java
  • 关于单链表的一些基本操作

    #include <iostream>
    #include <cstdio>
    #include <malloc.h>
    using namespace std;
    
    /* 定义单链表数据 */
    typedef char ElemType;
    typedef struct LNode
    {
        ElemType data;
        struct LNode *next;
    }LinkList;
    
    /* 单链表的初始化 */
    void InitList(LinkList *&L)
    {
        L = (LinkList *)malloc(sizeof(LinkList));
        L->next=NULL;
    }
    
    /* 向单链表中插入数据元素 */
    bool ListInsert(LinkList *&L,int x,char e)
    {
        int j = 0;
        LinkList *p = L, *s;
        while(p!=NULL && j<x-1)
        {
            p = p->next;
            j++;
        }
        if(p==NULL)
        {
            return false;
        }
        else
        {
            s = (LinkList *)malloc(sizeof(LinkList));
            s->data = e;
            s->next = p->next;
            p->next = s;
            return true;
        }
    }
    
    /* 输出单链表 */
    void DispList(LinkList *L)
    {
        LinkList *p = L->next;
        while(p!=NULL)
        {
            printf("%c",p->data);
            p = p->next;
        }
        printf("
    ");
    }
    
    /* 求单链表的长度 */
    int ListLength(LinkList *L)
    {
        LinkList *p = L->next;
        int i = 0;
        while(p!=NULL)
        {
            i++;
            p = p->next;
        }
        return i;
    }
    
    /* 查看单链表是否为空 */
    bool ListEmpty(LinkList *L)
    {
        return L->next==NULL;
    }
    
    /* 求单链表中某个数据元素值 */
    bool GetElem(LinkList *L,int i, ElemType &e)
    {
        LinkList *p = L;
        int j = 0;
        while(p!=NULL && j < i)
        {
            p=p->next;
            j++;
        }
        if(p==NULL)
        {
            return false;
        }
        else
        {
            e = p->data;
            return true;
        }
    }
    
    /* 在单链表中查找元素 */
    int LocateElem(LinkList *L,ElemType e)
    {
        LinkList *p = L;
        int i = 0;
        while(p!=NULL && p->data!=e)
        {
            p = p->next;
            i++;
        }
        if(p==NULL)
        {
            return 0;
        }
        else
        {
            return i;
        }
    }
    
    /* 删除单链表中第 i 个元素*/
    bool ListDelete(LinkList *&L,int i,ElemType &e)
    {
        int j = 0;
        LinkList *p = L, *q;
        while(p!=NULL && j < i - 1)
        {
            p = p->next;
            j++;
        }
        if(p==NULL)
            return false;
        else
        {
            q = p->next;
            if(q==NULL)
                return false;
            e = q->data;
            p->next = q->next;
            free(q);
            return true;
        }
    }
    
    /* 删除单链表 */
    void DestroyList(LinkList *&L)
    {
        LinkList *p = L;
        LinkList *q = p->next;
        while(q!=NULL)
        {
            free(p);
            p = q;
            q = p->next;
        }
        free(p);
    }
    
    int main( )
    {
        LinkList *h;
        ElemType e;
        printf("单链表的基本运算如下:
    ");
        printf("(1)初始化单链表
    ");
        InitList(h);
        printf("(2)依次采用尾插法插入 a,b,c,d,e 元素
    ");
        ListInsert(h,1,'a');
        ListInsert(h,2,'b');
        ListInsert(h,3,'c');
        ListInsert(h,4,'d');
        ListInsert(h,5,'e');
        printf("(3)输出单链表:");
        DispList(h);
        printf("(4)单链表h的长度 = %d
    ",ListLength(h));
        printf("(5)单链表h为%s
    ",(ListEmpty(h)?"":"非空"));
        GetElem(h,3,e);
        printf("(6)单链表h的第3个元素 = %c
    ",e);
        printf("(7)元素a的位置 = %d
    ",LocateElem(h,'a'));
        printf("(8)在第4个元素位置上插入f元素
    ");
        ListInsert(h,4,'f');
        printf("(9)输出单链表h:");
        DispList(h);
        printf("(10)删除h的第3个元素
    ");
        ListDelete(h,3,e);
        printf("(11)输出单链表h:");
        DispList(h);
        printf("(12)释放单链表h
    ");
        DestroyList(h);
        return 0;
    }
  • 相关阅读:
    docker知识集锦
    kubernetes知识集锦
    redis知识集锦
    Java多线程知识集锦
    vscode离线安装插件
    jsoncpp的简易教程
    为什么要自动化测试?
    如何选择正确的自动化测试工具
    如何选择测试自动化工具?
    测试自动化的五大挑战
  • 原文地址:https://www.cnblogs.com/mengqimoli/p/8604757.html
Copyright © 2011-2022 走看看