C++实现数据结构链式线性表的基本操作

#include <iostream>

using namespace std;

typedef int ElemType;

typedef struct Node{

    ElemType e;

    struct Node * next;

}Node,*LinkList;

void initList(LinkList &L){

    L = new Node;

    L->next = NULL;

}

//插入

void insertList(LinkList &L, ElemType e){

    LinkList p = new Node;

    p->e = e;

    p->next = L->next;

    L->next = p;

}

//输出

void outputList(LinkList &L){

    LinkList p = L->next;

    if (p == NULL)

    {

        cout<<"此链表为空链表"<<endl;

    }

    else{

        while (p != NULL)

        {

            cout<<p->e<<endl;

            p = p->next;

        }

    }

   

}

//求表长

int getLength(LinkList &L){

    int i = 0;

    LinkList p = L;

    while (p->next != NULL)

    {

        i++;

        p = p->next;

    }

    return i;

}

//查找值为e的结点

bool hasList(LinkList &L, ElemType e){

    LinkList p = L->next;

    while (p != NULL)

    {

        if(p->e == e){

            return true;

        }

        p = p->next;

    }

    return false;

}

//查找第i个位置的元素

void searchIndex(LinkList &L, int index){

    int length1 = getLength(L);

    if (index<=0 || index>length1)

    {

        cout<<"您输入的索引超过了线性表的长度范围。"<<endl;

    }

    else

    {

        LinkList p = L;

        int i = 0;

        while (p->next != NULL)

        {

            p = p->next;

            i++;

            if(i == index)

            {

                cout<<"第个"<<index<<"位置的元素为"<<p->e<<endl;

            }

        }

    }

}

//删除

void deleteElem(LinkList &L, ElemType e){

    LinkList p = L;

    LinkList q = NULL;

    while (p->next != NULL){

        if (p->next->e == e)

        {

            q = p->next;

            p->next = p->next->next;

            break;

        }

        p = p->next;

    }

    if (q != NULL)

    {

        delete q;

        cout<<"元素"<<e<<"删除成功。"<<endl;

    }

    else

    {

        cout<<"元素"<<e<<"不存在于此线性表中。"<<endl;

    }

}

//删除第i个元素

void deleteIndex(LinkList &L, int i){

    int length2 = getLength(L);

    if (i<=0 || i>length2)

    {

        cout<<"您输入的索引超过了线性表的长度范围。"<<endl;

    }

    else

    {

         LinkList p = L;

        LinkList q = NULL;

        int num = 0;

        while (p->next != NULL)

        {

            num++;

            if(num == i){

                q = p->next;

                p->next = p->next->next;

                break;

            }

            p = p->next;

        }

        if (q !=NULL)

        {

            delete q;

            cout<<"删除成功。"<<endl;

        }

    }

}

//在指定位置插入元素

void insertElement(LinkList &L,int i,ElemType e){

    int length3 = getLength(L);

    if (i<=0 || i>length3)

    {

        cout<<"您想要插入的位置超过了线性表的长度范围。"<<endl;

    }

    else

    {

        LinkList p = L;

        LinkList q = new Node;

        int num1 = 0;

        while (p->next != NULL)

        {

            num1++;

            if(num1 == i){

                q->next = p->next;

                p->next = q;

                q->e = e;

                break;

            }

            p = p->next;

        }

    }

}

int main()

{

    LinkList L = NULL;

    initList(L);

    while (1)

    {

        cout<<"-----线性表操作-----"<<endl;

        cout<<"选择1:插入元素。"<<endl;

        cout<<"选择2:打印出线性表"<<endl;

        cout<<"选择3:返回线性表的长度"<<endl;

        cout<<"选择4:根据索引查找元素"<<endl;

        cout<<"选择5:判断线性表中是否包含指定元素"<<endl;

        cout<<"选择6:根据元素名称删除该元素"<<endl;

        cout<<"选择7:根据索引删除元素"<<endl;

        cout<<"选择8:在指定位置前插入元素"<<endl;

        cout<<"选择9:退出线性表"<<endl;

        cout<<"请输入您的选择"<<endl;

        int i;

        cin>>i;

        switch (i)

        {

        case 1:

            cout<<"请输入您要插入的元素的个数:"<<endl;

            int num;

            cin>>num;

            for (int i = 0; i < num; i++)

            {

                ElemType element1;

                cin>>element1;

                insertList(L,element1);

            }

            break;

        case 2:

            cout<<"此线性表的元素如下:"<<endl;

            outputList(L);

            break;

        case 3:

            int length;

            length = getLength(L);

            cout<<"此线性表的表长为"<<length<<endl;

            break;

        case 4:

            cout<<"请输入您要查找的的位置:"<<endl;

            int index1;

            cin>>index1;

            searchIndex(L,index1);

            break;

        case 5:

            cout<<"请输入您要核对的元素:"<<endl;

            ElemType element2;

            cin>>element2;

            bool state;

            state = hasList(L,element2);

            if(state){

                cout<<"元素"<<element2<<"存在于此线性表中"<<endl;

            } else{

                cout<<"元素"<<element2<<"不存在于此线性表中"<<endl;

            }

            break;

        case 6:

            cout<<"请输入您要删除的元素"<<endl;

            ElemType element3;

            cin>>element3;

            deleteElem(L,element3);

            break;

        case 7:

            cout<<"请输入您要删除元素的位置:"<<endl;

            int index2;

            cin>>index2;

            deleteIndex(L,index2);

            break;

        case 8:

            cout<<"请输入您要插入的位置:"<<endl;

            int address;

            cin>>address;

            cout<<"请输入您想要插入的元素:"<<endl;

            ElemType e;

            cin>>e;

            insertElement(L,address,e);

            break;

        case 9:

            goto TiaoChu;

        }

    }

    TiaoChu : return 0;

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值