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

数据结构实验二 :线性表的实验

2014-10-26 20:19 148 查看
更多《数据结构》作业



一..实验目的

巩固线性表的数据结构,学会线性表的应用。

1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。

2.学习运用线性表的知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

准备时间为第2周到第4周,具体集中实验时间为第4周第2次课。2个学时。

三..实验内容

1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。

要求如下:

1)用顺序表来实现。

2)用单链表来实现。
顺序表的代码如下:
#include<iostream>

using namespace std;

const int Maxsize = 30;

class SeqList

{

public:

SeqList(){ length = 0; }

SeqList(int a[], int n);

~SeqList(){}

void Insert(int i, int x);

int Delete(int i);

int Locate(int x);

void PrintList();

private:

int data[Maxsize];

int length;

};

SeqList::SeqList(int a[], int n)

{

if (n > Maxsize) throw "参数非法";

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

data[i] = a[i];

length = n;

}

void SeqList::Insert(int i, int x)

{

if (length >= Maxsize) throw "上溢";

if (i<1 || i>length + 1) throw"位置非法";

for (int j = length; j >= i; j--)

data[j] = data[j - 1];

data[i - 1] = x;

length++;

}

int SeqList::Delete(int i)

{

if (length == 0) throw"下溢";

if (i<1 || i>length) throw "位置非法";

int x = data[i - 1];

for (int j = i; j < length; j++)

data[j - 1] = data[j];

length--;

return x;

}

int SeqList::Locate(int x)

{

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

if (data[i] == x) return i + 1;

return 0;

}

void SeqList::PrintList()

{

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

cout << data[i] << " ";

cout << endl;

}

void main(){

int r[5] = {11, 23, 44, 77, 100};

SeqList L(r, 5);

cout << "执行插入前的数据为:" << endl;

L.PrintList();

try

{

L.Insert(2, 100);

}

catch (char *s)

{

cout << s << endl;

}

cout << "执行插入操作后的数据为:" << endl;

L.PrintList();

cout << "值为100的元素的位置为:";

cout << L.Locate(100) << endl;

cout << "执行删除第一个元素操作,删除前的数据为:" << endl;

L.PrintList();

try

{

L.Delete(1);

}

catch (char *s)

{

cout << s << endl;

}

cout << "删除后的数据为:" << endl;

L.PrintList();

}
顺序表结果如图:



线性表丶单链表的代码:
#include<iostream>

using namespace std;

template<class T>

struct Node

{

T data;

Node<T>* next;

};

template<class T>

class LinkList

{

public:

LinkList ();

LinkList(T a[],int n);

~LinkList();

void Insert (int i,T x);

int Locate(T x) ;

T Delete(int i);

void PrintList();

private:

Node<T>* first;

};

template<class T>

LinkList<T>::LinkList()

{

first = new Node<T>;

first->next=NULL;

}

template<class T>

LinkList<T>::LinkList(T a[],int n)

{

Node <T> *r,*s;

first = new Node<T>;

r = first;

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

{

s = new Node<T>;

s->data=a[i];

r->next =s;

r=s;

}

r->next= NULL;

}

template<class T>

LinkList<T>::~LinkList()

{

Node<T> *q = NULL;

while(first != NULL)

{

q = first;

first= first->next;

delete q;

}

}

template<class T>

void LinkList<T>::Insert(int i,T x)

{

Node<T> *p = first,*s=NULL;

int count = 0;

while(p!=NULL&&count< i-1)

{

p = p->next;

count++;

}

if(p==NULL) throw "位置非法";

else

{

s = new Node<T>;

s->data =x;

s->next=p->next;

p->next= s;

}

}

template<class T>

T LinkList<T>::Delete(int i)

{

Node<T> *p =first,*q=NULL;

T x;

int count = 0;

while(p!=NULL && count<i-1)

{

p = p->next;

count++;

}

if(p==NULL ||p->next==NULL) throw"位置";

else

{

q=p->next;

x=q->data;

p->next=q->next;

return x;

}

}

template<class T>

int LinkList<T>::Locate(T x)

{

Node<T>*p =first->next;

int count =1;

while(p!=NULL)

{

if(p->data==x) return count;

p=p->next;

count++;

}

return 0;

}

template<class T>

void LinkList<T>::PrintList()

{

Node<T>*p =first-> next;

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

void main(){

int r[5] = {11, 23, 44, 77, 100};

LinkList<int> L(r, 5);

cout << "执行插入前的数据为:" << endl;

L.PrintList();

try

{

L.Insert(2, 100);

}

catch (char *s)

{

cout << s << endl;

}

cout << "执行插入操作后的数据为:" << endl;

L.PrintList();

cout << "值为100的元素的位置为:";

cout << L.Locate(100) << endl;

cout << "执行删除第一个元素操作,删除前的数据为:" << endl;

L.PrintList();

try

{

L.Delete(1);

}

catch (char *s)

{

cout << s << endl;

}

cout << "删除后的数据为:" << endl;

L.PrintList();

}

线性表丶单链表结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: