数据结构:实验二线性表综合实践⑤间接寻址

本文介绍了一个关于线性表的实验,实验中通过间接寻址建立了一个包含5个学生成绩的顺序表,并实现了对表的基本操作如插入、删除、查找等。展示了具体的C++代码实现及实验结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。

二.实验内容
通过间接寻址建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

三.实验报告
1.实验代码如下:

#include<iostream>  
using namespace std;

const int Maxsize = 100;

template<typename T>
struct Node {
    T data;
    Node<T> *next;
};

template<typename T>
class InA {
public:
    InA();//无参构造函数  
    InA(T score[], int n);//有参构造函数  
    virtual ~InA();//析构函数  
    void print();//遍历操作  
    T get(int i);//按位查找操作  
    int Locate(T x);//按值查找操作  
    void insert(int i, T x);//插入操作  
    T Delete(int i);//删除操作  
private:
    Node<T> *first; //头指针  
    int length; //结点数量  
    Node<T> *address[Maxsize];  //结点指针数组  
};

template<typename T>
InA<T>::InA()
{
    first = new Node<T>;
    first->next = NULL;
}

template<typename T>
InA<T>::InA(T score[], int n)
{
    if (n > Maxsize) throw("溢出");
    Node<T> *s;
    first = new Node<T>; first->next = NULL; //初始化一个空链表    
    for (int i = n - 1; i >= 0; i--)
    {
        s = new Node<T>; s->data = score[i];  //为每个数组元素建立一个结点    
        s->next = first->next; first->next = s;  //将结点s插入头结点之后    
    }
}

template<typename T>
InA<T>::~InA()                 //析构函数    
{
    Node<T> *q;
    while (first != NULL)
    {
        q = first;
        first = first->next;
        delete q;
    }
}

template<typename T>
void InA<T>::insert(int i, T x)
{
    Node<T>*p, *s; int count;
    p = first; count = 0;
    while (p != NULL&&count<i - 1)
    {
        p = p->next;
        count++;
    }
    if (p == NULL)throw"位置非法";
    s = new Node<T>; s->data = x;
    s->next = p->next;
    p->next = s;
    length++;
}

template<typename T>
T InA<T>::Delete(int i)
{
    Node<T> *q, *p; T x; int count;
    p = first; count = 0; //注意P指针要指向头结点    
    while (p != NULL&&count<i - 1)   //此操作目的是找到i-1个结点  
    {
        p = p->next;
        count++;
    }
    if (p == NULL || p->next == NULL)throw"位置";  //结点p不存在或p后继结点不存在  
    else {
        q = p->next; x = q->data;  //暂存被删结点    
        p->next = q->next;
        delete q;
        return x;
    }
}

template<typename T>
T InA<T>::get(int i)
{
    Node<T>*p; int count;
    p = first->next; count = 1;
    while (p != NULL&&count<i)
    {
        p = p->next; count++;
    }
    if (p == NULL)throw"位置非法";
    else return p->data;
}

template<typename T>
int InA<T>::Locate(T x)
{
    Node<T>*p; int count = 1;
    p = first->next;
    while (p != NULL)
    {
        if (p->data == x)return count;
        p = p->next;
        count++;
    }
    return count;
}

template<typename T>
void InA<T>::print()
{
    Node<T>*p;
    p = first->next;
    while (p != NULL)
    {
        cout << p->data << "  ";;
        p = p->next;
    }
}

void main()
{
    int score[5] = { 66,71,68,45,93 };
    InA<int>student(score, 5);    //创建对象    
    cout << "学生成绩:";
    student.print();
    cout << endl << "在位置3插入成绩63,结果如下:" ;
    student.insert(3, 63);
    student.print();
    cout << endl <<"在位置2删除成绩为:" << student.Delete(2) << "删除后结果如下:" ;
    student.print();
    cout << endl << "位置3的成绩为:" << student.get(3) ;
    cout << endl << "成绩63所在位置为:" << student.Locate(63) ;
}

2.实验结果
这里写图片描述
四.实验总结
通过间接寻址建立一个由5个学生成绩的顺序表,学生成绩分别为66, 71, 68, 45, 93 ,对表在位置3插入63,插入后学生成绩为66, 71, 63,68, 45, 93 ,删除位置2的成绩71,删除后为66, 63, 68, 45, 93 .

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值