美文网首页工作生活C++和数据结构
创建链表采用两种方法(结构体和类)

创建链表采用两种方法(结构体和类)

作者: 朱宏飞 | 来源:发表于2019-07-04 09:46 被阅读0次

    加油其实并不难,熟悉语法,然后按照流程图来进行操作问题就是不大。问题就出现在编程语言不熟悉。新的一天加油!

    -----------------------------------------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------------------------------------

    //库函数头文件包含

    #include <iostream>

    using namespace std;

    //函数状态码定义

    #define TRUE        1

    #define FALSE      0

    #define OK          1

    #define ERROR      0

    #define INFEASIBLE -1

    #define OVERFLOW  -2

    typedef int  Status;

    typedef int  ElemType; //假设线性表中的元素均为整型

    typedef struct LNode  //定义节点的结构

    {

        ElemType data;

        struct LNode *next;

    }LNode,*LinkList;    //这个节点的别名

    /*

    LNode是给这个结构起的一个名字,可以用LNode去定义变量,

    在这里已经和int/char这样的关键字一样了。

    *LinkList是指向这个结构的一个指针,也可以去定义变量,

    定义出来的是指向这个结构的指针变量。

    */

    Status ListCreate_L(LinkList &L,int n)  //创建链表采用尾插法,较为方便

    {

        LNode *rearPtr,*curPtr;  //一个尾指针,一个指向新节点的指针

        //L=(LNode*)malloc(sizeof (LNode));

        L=new LNode; //新建一个节点L

        if(!L)exit(OVERFLOW);

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

        rearPtr=L;  //初始时头结点为尾节点,rearPtr指向尾巴节点

        for (int i=1;i<=n;i++){  //每次循环都开辟一个新节点,并把新节点拼到尾节点后

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

            if(!curPtr)exit(OVERFLOW);

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

            curPtr->next=NULL;  //最后一个节点的next赋空

            rearPtr->next=curPtr;

            rearPtr=curPtr;

        }

        return OK;

    }

    int main()

    {

        LinkList L;

        int n;

        int x,k; 

        cin>>n;  //输入链表中元素个数

        if(ListCreate_L(L,n)!= OK) {

              cout<<"表创建失败!!!\n";

              return -1;

        }

      return 0;

    }

    -----------------------------------------------------------------------------------------------------------------------------------

    Class版

    #include<iostream>

    using namespace std;

    class List;//友元类的前置声明

    class Node//节点

    {

    friend class List;//声明一个友元类 ,然后就可以对私有的进行操作

    private:

    int data;  //节点中数据

    Node* link; //指向下一个节点的指针

    };

    class List//链表

    {

    public:

    void test();

    void show();

    private:

    Node* first;

    };

    void List::test(){

    Node *f=new Node();

    f->data=44;

    f->link=0;

    first=f;

    f=new Node();

    f->data=72;

    f->link=0;

    first->link=f;

    f=new Node();

    f->data=210;

    f->link=0;

    first->link->link=f;

    }

    void List::show(){    //::作用域所属关系属于List这个类下的show方法

    cout<<first->data<<endl

        <<first-> link->data<<endl

        <<first->link->link->data<<endl;

    }

    int main(){

    List a;

    a.test(); //创建了三个节点

    a.show();

    cout<<"ok"<<endl;

    return 0;

    }

    相关文章

      网友评论

        本文标题:创建链表采用两种方法(结构体和类)

        本文链接:https://www.haomeiwen.com/subject/tpgkhctx.html