《数据结构》实验二:
线性表综合实验
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
3)用双链表实现。
4)用静态链表实现。
5)用间接寻址实现。
双链表的实现
#include
using namespace std;
const int M=100;
//双链表的存储
struct DulNode
{
int data;
DulNode *prior,*next;
};
class LinkList{
public:
LinkList();
LinkList(int a[],int n);
~LinkList();
int Length();
int Get(int i);
int Locate(int x);
void Insert(int i,int x);
int Delete(int i);
void PrintList();
private:
DulNode *first;
};
//遍历操作
void LinkList::PrintList()
{
DulNode *p;
p=first->next; //使其指向第一个元素
while(p!=NULL)
{
cout<
data<<" ";
p=p->next; //指针后移
}
cout<
next; //使其指向第一个元素
while(p!=NULL)
{
p=p->next; //指针后移
count++;
}
return count;
}
//按位查找
int LinkList::Get(int i)
{
DulNode *p;
int count=1;
p=first->next;
while(p!=NULL&&count
next;
count++;
}
if(p==NULL) throw"位置";
else return p->data;
}
//按值查找
int LinkList::Locate(int x)
{
DulNode *p;
int count=1;
p=first->next;
while(p!=NULL)
{
if(p->data==x) return count;
p=p->next;
count++;
}
return 0;
}
//插入操作
void LinkList::Insert(int i,int x)
{
DulNode *p,*s;
int count=0;
p=first; //p指向头节点
while(p!=NULL&&count
next; count++; } if(p==NULL) throw"位置"; else { s=new DulNode;s->data=x; s->prior=p; s->next=p->next; p->next->prior=s; p->next=s; } } //无参构造函数 LinkList::LinkList() { first=new DulNode; //头结点 first->next=NULL; } //有参构造函数 LinkList::LinkList(int a[],int n) { DulNode *s,*r; first=new DulNode;r=first; for(int i=0;i
data=a[i]; s->prior=r; r->next=s; r=s; } r->next=NULL; } //删除操作 int LinkList::Delete(int i) { DulNode *p; int count=0; p=first;int x; while(p!=NULL&&count
next; count++; } if(p==NULL) //结点p不存在或其后继结点不存在 throw"位置"; else{ x=p->data; (p->prior)->next=p->next; if(p->next!=NULL) (p->next)->prior=p->prior; delete p; return x; } } //析构函数 LinkList::~LinkList() { DulNode *q; while(first!=NULL) { q=first; first=first->next; delete q; } } int main() { int x,n,loc,len,tab; cout<<"\t\t\t\t\t录入学生成绩信息"<
>n; for(j=0;j
>d[j]; } LinkList List(d,n); while (1) { cout<<"\t\t\t\t\t********** 双链表的实现 **********"<
>tab; switch(tab) { case 1: { cout<<"\t\t\t\t\t1.输出学生成绩 :"; List.PrintList(); cout<
>loc; x=List.Get(loc); cout <<"\t\t\t\t\t要查找的成绩是:"<
<
>x; loc=List.Locate(x); cout<<"\t\t\t\t\t输入要查找成绩的位置是:"<
<
>loc; cout<<"\t\t\t\t\t输入要插入的成绩:"; cin>>x; List.Insert(loc,x); cout<
>loc; x=List.Delete(loc); cout<
<<"\t\t\t\t\t已被删除√"<
<
执行结果截图:
1)录入并输出学生成绩
![](https://img-blog.csdn.net/20171011232743825?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2)输出表长
![](https://img-blog.csdn.net/20171011232755837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3)按位查找
![](https://img-blog.csdn.net/20171011232807461?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4)按值查找
![](https://img-blog.csdn.net/20171011232823256?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5)插入操作
![](https://img-blog.csdn.net/20171011232836464?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
6)插入成功后输出成绩
![](https://img-blog.csdn.net/20171011232847720?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
7)
删除操作
![](https://img-blog.csdn.net/20171011232905189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
8)插入成功后输出成绩
![](https://img-blog.csdn.net/20171011232915471?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYzc3Nzc3Xw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)