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;
    }
  • 相关阅读:
    阿里云的一道面试题:写一个爬取文档树和通过输入关键字检索爬取的内容的demo
    linux配置SVN,添加用户,配置用户组的各个权限教程
    logback的使用和配置|logback比log4j的优点|logback是一个更好的log4j
    [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题
    MySql-----InnoDB记录存储结构-----1
    Mysql----字符集和比较规则
    Mysql-----启动和配置文件-----2(未完,待续)
    MySql----前言有点用----1
    Java高并发--------并行模式和算法(需要看更多的东西,才能总结)---------5
    Java高并发------锁优化及注意事项--------4
  • 原文地址:https://www.cnblogs.com/mengqimoli/p/8604757.html
Copyright © 2011-2022 走看看