实验二:双链表

来源:互联网 发布:博微设计软件 编辑:程序博客网 时间:2024/05/23 01:20

实验内容

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

要求如下:

用双链表实现。

#include <iostream>
using namespace std;


template <class Datatype>
struct DulNode
{
Datatype data;
DulNode<Datatype> *prior, *next;
};


template <class Datatype>
class DulLinklist
{
public:
DulLinklist();
DulLinklist(Datatype a[], int n);
~DulLinklist();
int Locate(Datatype x);
void Insert(int i, Datatype x);
Datatype Delete(int i);
void Printlist();
private:
DulNode<Datatype> *frist;
};


template< class Datatype>
DulLinklist<Datatype>::DulLinklist()
{
frist = new DulNode<Datatype>;
frist->next = NULL;
frist->prior = NULL;
}


template <class Datatype>
DulLinklist<Datatype>::DulLinklist(Datatype a[], int n)
{
DulNode<Datatype> *r, *s;
frist = new DulNode<Datatype>;
r = frist;
for (int i = 0; i<n; i++)
{
s = new DulNode<Datatype>;
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}


template<class Datatype>
DulLinklist<Datatype>::~DulLinklist()
{
DulNode<Datatype> *q = NULL;
while (frist != NULL)
{
q = frist;
(frist->prior)->next = frist->next;
(frist->next)->prior = frist->prior;
frist = frist->next;
delete q;


}
delete frist;
}


template <class Datatype>
void DulLinklist<Datatype>::Insert(int i, Datatype x)
{
DulNode<Datatype> *p = frist, *s = NULL;
int count = 0;
while (p != NULL && count<i - 1)
{
p = p->next;
count++;
}
if (p == NULL) throw   "位置";
else {
s = new DulNode<Datatype>;
s->data = x;
s->prior = p;
s->next = p->next;
(p->next)->prior = s;
p->next = s;
}
}


template <class Datatype>
Datatype DulLinklist<Datatype>::Delete(int i)
{
DulNode<Datatype> *p = frist, *q = NULL;
Datatype x;
int count = 0;
while (p != NULL && count<i - 1)
{
p = p->next;
count++;
}
if (p == NULL || p->next == NULL || p->next->next==NULL) throw "位置";
else
{
q = p->next;
x = q->data;
p->next = q->next;
(q->next)->prior = p;
delete q;
return x;
}
}


template <class Datatype>
int DulLinklist<Datatype>::Locate(Datatype x)
{
DulNode<Datatype> *p = frist->next;
int count = 1;
while (p != NULL)
{
if (p->data == x) return count;
p = p->next;
count++;
}
return 0;
}


template <class Datatype>
void DulLinklist<Datatype>::Printlist()
{
DulNode<Datatype> *p = frist->next;
while (p != NULL)
{
cout << p->data << "  ";
p = p->next;
}
cout << endl;
}
int main()
{
int r[5] = { 100,90,80,70,60 };
DulLinklist<int>L(r, 5);
cout << "执行插入成绩操作前数据为:" << endl;
L.Printlist();
L.Insert(2, 95);
cout << "执行插入成绩操作后数据为:" << endl;
L.Printlist();
cout << "值为74的元素位置为:";
cout << L.Locate(80) << endl;
cout << "执行删除第一个学生成绩操作前数据为:" << endl;
L.Printlist();
L.Delete(1);
cout << "执行删除成绩操作后数据为:" << endl;
L.Printlist();
return 0;
}

原创粉丝点击