• D_S 单链表的基本操作


    //  main.cpp

    #include <iostream>

    using namespace std;

    #include "Status.h"

    #include "LinkList.h"

    int main()

    {

        LinkList L;

        int n,i;

        ElemType e;

        InitList(L);

        cout<<" L=";

        ListTraverse(L);

        cout<<" 请设置将向线性表L中输入的元素个数:";

        cin>>n;

        CreateList(L,n);

        cout<<" L=";

        ListTraverse(L);

        cout<<" L的表长为:"<<ListLength(L)<<endl;

        cout<<" 请输入想要获取的元素位序:";

        cin>>i;

        if(GetElem(L,i,e)) cout<<" 第"<<i<<"个元素为:"<<e<<endl;

        else cout<<" 第"<<i<<"个元素不存在!"<<endl;

        cout<<" 请输入要查找的元素:";

        cin>>e;

        if((i=(LocateElem(L,e)))) cout<<" 元素"<<e<<"的位置为:"<<i<<endl;

        else cout<<" 元素"<<e<<"不存在!"<<endl;

        cout<<" 请输入插入位置和所插入元素:";

        cin>>i>>e;

        if(ListInsert(L,i,e))

        {

            cout<<" L=";

            ListTraverse(L);

        }

        else cout<<" 插入操作失败!"<<endl;

        cout<<" 请输入被删元素的位置:";

        cin>>i;

        if(ListDelete(L,i,e)) cout<<" 被删元素为:"<<e<<endl;

        else cout<<" 删除操作失败!"<<endl;

        cout<<" L=";

        ListTraverse(L);

        return 0;

    }

    // Status.h

    #ifndef yuan_Status_h

    #define yuan_Status_h

    #define TRUE 1

    #define FALSE 0

    #define OK 1

    #define ERROR 0

    #define INFEASIBLE -1

    #define OVERFLOW -2

    typedef int Status;

    typedef int ElemType;

    #endif

    //  LinkList.h

    #ifndef yuan_LinkList_h

    #define yuan_LinkList_h

    typedef struct LNode{

        ElemType data;   //结点的数据域

        struct LNode *next;  //结点的指针域

    }LNode,*LinkList;  //LinkList为指向结构体LNode的指针类型

    //1.单链表的初始化

    Status InitList(LinkList &L)

    {    //构造一个空的单链表

        L=new LNode;   //生成新结点作为头结点,用头指针L指向头结点

        L->next=NULL;  //头结点的指针域制空

        return OK;

    }

    //2.单链表的创建

    //2.1前插法创建单链表

    void CreateList(LinkList &L,int n)

    {//逆位序输入n个元素的值,创建带头结点的单链表L

        L=new LNode;

        LinkList p;

        L->next=NULL; //先建立一个带头结点的空链表

        cout<<" 请输入"<<n<<"个元素:";

        for (int i=n; i>0; i--) {

            p=new LNode;  //生成新结点

            cin>>p->data;  //输入元素值

            p->next=L->next; L->next=p; //插入到表头

        }

    }

    //3.单链表的遍历

    void ListTraverse(LinkList L)

    {

        LinkList p=L->next;

        while(p) {

            cout<<p->data<<"  ";

            p=p->next;

        }

        cout<<endl;

    }

    //4.单链表的长度

    Status ListLength(LinkList L){

        LinkList p;int j=0;

        p=L->next;

        while(p) {

            j++;

            p=p->next;

        }

        return j;

    }

    //5.单链表的插入

    Status ListInsert(LinkList &L,int i,ElemType e)

    {

        LinkList p=L,s; int j=0;

        while (p&&j<i-1) {p=p->next;++j;}

        if (!p||j>i-1)  return ERROR;

        s=new LNode;

        s->data=e;

        s->next=p->next;

        p->next=s;

        return OK;

    }

    //6.单链表的删除

    Status ListDelete(LinkList &L,int i,ElemType &e)

    {

        LinkList p=L,q;int j=0;

        while (p->next&&j<i-1){p=p->next;++j;}

        if (!(p->next)||j>i-1) return ERROR;

        q=p->next;

        p->next=q->next;

        delete p;

        return OK;

    }

    //7.单链表的按序号查找

    Status GetElem(LinkList L,int i,ElemType &e)

    {//在带头结点的单链表L中查找第i个元素

        LinkList p;int j=1;p=L->next;   //初始化,p指向第一个结点,j为计数器

        while (p&&j<i) {p=p->next;++j;}

        if (!p||j>i) return ERROR;  //第i个元素不存在

        e=p->data;   //取第i个元素

        return OK;

    }

    //8.单链表的按值查找

    Status LocateElem(LinkList L,ElemType e)

    {

        LinkList p;int j=1;

        p=L->next;

        while (p&&j<=ListLength(L)) {

            if(p->data==e) return j;

            p=p->next;++j;

        }

        if (!p||j>ListLength(L)) return ERROR;

        return OK;

    }

    ////8.单链表的按值查找

    //LNode *LocateElem(LinkList L,ElemType e)

    //{

    //    LinkList p=L->next;

    //    while (p&&p->data!=e)

    //        p=p->next;

    //    return p;

    //}

    #endif

  • 相关阅读:
    第一章数据结构——实现线性表
    hdu 4454 Stealing a Cake(三分之二)
    找呀志_java网络编程(4)TCP/IP、Http和Socket差额
    Velocity脚本新手教程
    2015第15周日PostgreSQL学习
    2015第15周六Java线程池
    2015第15周五寻找身边聪明的人
    2015第15周四
    2015第15周三
    2015第15周二
  • 原文地址:https://www.cnblogs.com/YuanYe1/p/5014671.html
Copyright © 2020-2023  润新知