您的位置:首页 > 理论基础 > 数据结构算法

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

2017-10-12 09:43 453 查看
一.实验目的

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

二.实验内容

通过间接寻址建立一个由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];  //结点指针数组
};

temp
4000
late<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 .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: