我是靠谱客的博主 温柔斑马,这篇文章主要介绍链表的基本操作(建立一有序的链表并实现线性表的基本操作(初始化、插入、删除、查找等)。),现在分享给大家,希望可以做个参考。

  1. 实验内容

建立一有序的链表并实现线性表的基本操作(初始化、插入、删除、查找等)。

  1. 实验要求

(1)根据需求完成程序整体设计。

(2)根据整体设计,设计各个函数。

(3)完成程序代码,上机调试运行,得到实验结果。

(4)整理实验数据,撰写实验报告。

  1. 支撑的课程目标

本实验项目可以支撑课程目标1,2,3,4,5。通过本实验使学生掌握线性表的链式存储结构的特点,掌握线性表的基本操作(初始化、插入、删除、查找数据元素等)在链式存储结构上的实现,进行算法设计和程序实现,并能测试验证算法与程序的正确性。

推荐的编译运行软件
C/C++语言编译器
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。

安装 Dev C++ 跟安装普通软件一样。

Dev C++ 5.11 简体中文版下载地址:
官方下载:https://sourceforge.net/projects/orwelldevcpp/
百度网盘:
https://pan.baidu.com/s/1tG0_HSvDwZi4MvaplJ_Vew?pwd=wucr
提取码: wucr

完整实验代码
C++实现的

// Created on 2022/3/29.
//  建立一有序的链表并实现线性表的基本操作
#include <iostream>
#define ERROR 0;
#define OK 1;

using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct Node{

    ElemType data;
    struct Node * next;

}Node, * LinkList;

void menu();          // 显示选项菜单
Status initList(LinkList & L);              // 初始化一个空的单链表
void CreateFromHead(LinkList & L,int n);   // 头插法给单链表插入数据
void CreateFromTail(LinkList & L,int n);         // 尾插法给单链表插入数据
int ListLength(const LinkList & L);              // 返回单链表的长度,也就是元素节点个数
Status GetElem(LinkList L,int i,ElemType &e);           // 在单链表L中查找第i个结点的值(按序号查找)
LinkList Locate(const LinkList L,int &i,ElemType e);        // 在单链表L中查找第i个结点(按值查找)
Status InsertList(LinkList L,int i,ElemType e);     //在单链表中,第 i 个位置插入一个节点元素
Status DeleteList(LinkList L,int i,ElemType & e);    //在单链表中删除第 i 个节点元素
void showList(const LinkList & L);                //显示单链表中所有的元素值

int main(){

    menu();
    LinkList L;
    int choose;
    int result;
    int n,i;
    ElemType e;
    int length;
    cin>>choose;
    while(choose!=-1){
        switch(choose){
            case 1:
                system("cls");
                result = initList(L);
                if(result){
                    cout<<endl<<"result:初始化成功,已把单链表置为空"<<endl<<endl;
                }else{
                    cout<<endl<<"result:初始化失败!!!"<<endl;
                }
                break;

            case 2:
                system("cls");
                cout<<endl<<"请输入插入元素的个数(整数): ";
                cin>>n;
                CreateFromHead(L,n);
                break;
            case 3:
                system("cls");
                cout<<endl<<"请输入插入元素的个数(整数): ";
                cin>>n;
                CreateFromTail(L,n);
                break;
            case 4:
                system("cls");
                length = ListLength(L);
                cout<<endl<<"result:链表的长度为:"<<length<<endl<<endl;
                break;
            case 5:
                system("cls");
                cout<<"请输入查找的序号:";
                cin>>i;
                result = GetElem(L,i,e);
                if (result){
                    cout<<endl<<"result:查找成功! 该序号对应的节点元素的值为:"<<e<<endl<<endl;
                } else{
                    cout<<endl<<"result:查找失败! 该序号对应的节点元素不存在"<<endl<<endl;
                }
                break;
            case 6:
                system("cls");
                cout<<"请输入查找的值:";
                cin>>e;
                LinkList p;
                p = Locate(L,i,e);
                if (p){
                    cout<<endl<<"result:查找成功! 该值对应的节点元素的序号为:"<<i<<endl<<endl;
                } else{
                    cout<<endl<<"result:查找失败! 该链表中没有此值的元素节点"<<endl<<endl;
                }
                break;
            case 7:
                system("cls");
                cout<<"请输入插入的元素节点位置 i :";
                cin>>i;
                cout<<"请输入插入的元素节点的值:";
                cin>>e;
                result = InsertList(L,i,e);
                if (result){
                    cout<<endl<<"result:插入成功! "<<endl<<endl;
                } else{
                    cout<<endl<<"result:插入失败!"<<endl<<endl;
                }
                break;
            case 8:
                system("cls");
                cout<<"请输入删除的元素节点位置 i :";
                cin>>i;
                result = DeleteList(L,i,e);
                if (result){
                    cout<<endl<<"result:删除成功!删除的元素节点值为:"<<e<<endl<<endl;
                } else{
                    cout<<endl<<"result:删除失败!"<<endl<<endl;
                }
                break;
            case 9:
                system("cls");
                cout<<endl<<"result:";
                showList(L);
                cout<<endl;
                break;
            default:
                break;
        }
        menu();
        cin>>choose;
    }
    exit(-1);
    return 0;
}

void menu(){

    cout<<"-----------程序选项-----------"<<endl<<endl;
    cout<<"t1.初始化单链表t"<<endl;
    cout<<endl; 
    cout<<"t2.头插法插入数据t"<<endl;
    cout<<endl; 
    cout<<"t3.尾插法插入数据t"<<endl;
    cout<<endl; 
    cout<<"t4.求单链表长度t"<<endl;
    cout<<endl; 
    cout<<"t5.按序号查找元素t"<<endl;
    cout<<endl; 
    cout<<"t6.按值查找元素t"<<endl;
    cout<<endl; 
    cout<<"t7.插入一个数据元素t"<<endl;
    cout<<endl; 
    cout<<"t8.删除一个数据元素t"<<endl;
    cout<<endl; 
    cout<<"t9.输出单链表所有数据n";
    cout<<"-------------------------------"<<endl;
    cout<<"请输入对应功能的序号( 输入 -1 退出本程序!!! )"<<endl;
    cout<<"请输入序号: ";

}

Status initList(LinkList & L){

    L = new Node;
    if(L == NULL){
        return ERROR;
    }
    L->next = NULL;
    return OK;

}

void CreateFromHead(LinkList & L,int n){
	
	
    LinkList p;
    for (int i = 0; i < n; i++) {
        p = new Node;
        cout<<"请输入要插入的第"<<i+1<<"个数据:n";
        cin>>p->data;
        p->next = L->next;
        L->next = p;
    }

}

void CreateFromTail(LinkList & L,int n){
	
	initList(L);
    LinkList p;
    LinkList r = L;
    for (int i = 0; i < n; ++i) {
        p = new Node;
        cout<<"请输入要插入的第"<<i+1<<"个数据:n";
        cin>>p->data;
        p->next = NULL;
        r->next = p;
        r = p;
    }
}

int ListLength(const LinkList & L){

    int length = 0;
    LinkList p = L;
    while(p->next != NULL){
        length++;
        p = p->next;
    }
    return length;
}

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

    LinkList p = L;
    int count = 0;
    while (p != NULL && count < i){
        p = p->next;
        count++;
    }
    if(p == NULL || count > i){
        return ERROR;
    }
    e = p->data;
    return OK;

}

LinkList Locate(const LinkList L,int &i,ElemType e){

    LinkList p = L->next;
    int count = 1;
    while ( p != NULL){
        if ( p->data == e){
            i = count;
            return p;
        }
        p = p->next;
        count++;
    }
    i = -1;
    return NULL;
}

Status InsertList(LinkList L,int i,ElemType e){

    LinkList p = L;
    LinkList q;
    int count = 0;
    while ( p != NULL && count < i - 1){
        p = p->next;
        count++;
    }
    if (p == NULL || count > i){
        return ERROR;
    }
    q = new Node;
    q->data = e;
    q->next = p->next;
    p->next = q;
    return OK;
}

Status DeleteList(LinkList L,int i,ElemType & e){

    LinkList p = L;
    LinkList q;
    int count = 0;
    while (p != NULL && count < i - 1){
        p = p->next;
        count++;
    }
    if(p == NULL || count > i-1){
        return ERROR;
    }
    q = p->next;
    e = q->data;
    p->next = q->next;
    return OK;
}

void showList(const LinkList & L){

    LinkList p = L->next;
    while (p){
        cout<<p->data<<" ";
        p = p->next;
    }
    cout<<endl;
}

代码运行截图:
在这里插入图片描述

在这里插入图片描述

最后

以上就是温柔斑马最近收集整理的关于链表的基本操作(建立一有序的链表并实现线性表的基本操作(初始化、插入、删除、查找等)。)的全部内容,更多相关链表内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(120)

评论列表共有 0 条评论

立即
投稿
返回
顶部