淮海工学院计算机科学系
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
书
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目: 线性表数据结构试验
班 级: 软件 081
学 号: 110831104
姓 名: 强余彬
评语:
成绩: 指导教师:
批阅时间: 年 月 日
《 数据结构 》实验报告 - 1 -
1目的与要求:
1)掌握线性表数据结构的基本概念和抽象数据类型描述;
2)熟练掌握线性表数据结构的顺序和链式存储存表示;
3)熟练掌握线性表顺序存储结构的基本操作算法实现;
4)熟练掌握线性表的链式存储结构的基本操作算法实现;
5)掌握线性表在实际问题中的应用和基本编程技巧;
6)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结
果);
7)认真书写实验报告,并在试验后的第三天提交电子(全部由学委打包提交)和纸质(每
班每次5份,学委安排)。
2实验内容或题目
一、顺序表的基本操作实现实验
要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返
回结果适当给出):
1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内;
2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值); 3)在线性表中查找第i个元素,并返回其值;
4)在线性表中第i个元素之前插入一已知元素;
5)在线性表中删除第i个元素;
6)求线性表中所有元素值(整数)之和;
二、链表(带头结点)基本操作实验
要求:数据元素类型ElemType取字符型char。按照动态单链表结构实现如下算法(各算法边界条件适当给出):
1)按照头插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),
长度限定在10之内;
2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表
的结点顺序);
《 数据结构 》实验报告 - 2 - 3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;
4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回
FALSE;
5)在链表中按照有序方式插入一已知字符元素; 6)在线性表中删除第i个结点;
7)计算链表的长度。
3实验步骤与源程序
(1)顺序表
#include
#include
#include
#define maxsize 25
int length; //表长
// 顺序表结构定义
struct seqlist
{
int elem[maxsize]; //线性表占用的数组空间
int last; //下标,等于位序减1 }seqList;
// 遍历函数
void show (seqlist *p)
{
int i=0;
for(;ilast+1;i++)
{cout<elem[i]<>i>>j;
if(i<1||i>length)
cout<<"The wrong position! Input again: "<last;
for(;pos>=i;pos--)
{p->elem[pos+1]=p->elem[pos];}
p->elem[i-1]=j;
p->last++;
return 0;
};
// 查找函数
int find(seqlist *p)
{
int i;
int flag=1;
cout<<"Input the position you want to search: "<>i;
if(i<1||i>length)
cout<<"The wrong position! Input again: "<elem[i-1]<>i;
if(i<1||i>length)
cout<<"The wrong position! Input again: "<elem[i]=p->elem[i];}
p->last--;
return 0;
};
// 求和函数
int sum(seqlist *p)
{
int i=0;
int s=0;
for(;i<=p->last;i++)
{s+=p->elem[i];}
cout<>length;
p->last=length-1;
int i=0;
for(;i>p->elem[i];}
int flag=1;
int choose;
while(flag)
{
cout<<"Display:1 ";
cout<<"Insert:2 ";
cout<<"Search:3 ";
cout<<"Delete:4 ";
cout<<"Summary:5 ";
cout<<"Clear screen:6 ";
cout<<"EXIT: 0"<>choose;
switch(choose)
{
case 0:flag=0;break;
case 1:show (p);break;
case 2:insert (p);break;
case 3:find (p);break;
《 数据结构 》实验报告 - 6 -
case 4:del (p);break;
case 5:sum (p);break;
case 6:system("cls");break;
}
}
}
(2)链表 #include
#include
#include
#include
#define TRUE 1
#define FALSE 0
int length=0;
typedef struct node
{
char data;
struct node *next;
}nodetype,*Listlink;
//进行头插法创建链表
void create(Listlink *head,int n)
{
cout<<"用头插法建立单链表,请输入链表数据,以$结束!\n";
int i;
Listlink p;
char c;
cout<<"(按照头插法插入)"<next=NULL;
int flag=1;
while(flag) /* flag初值为1,当输入"$"时,置flag为0,建表结束*/
《 数据结构 》实验报告 - 7 -
{
cin>>c;
if(c!='$')
{
p=(Listlink)malloc(sizeof(struct node));/*建立新结点s*/
p->data=c;
p->next=(*head)->next;/*将s结点插入表头*/
(*head)->next=p;
}
else
flag=0;
i++;
}
};
//按位置查找
int Get1(nodetype *h,int i) {
int j;
nodetype *p=h;
j=0;
while((p->next!=NULL)&&(jnext;
j++;
}
if(i==j)
cout<data;
else
return FALSE;
};
//查找与已知字符e相同的结点
《 数据结构 》实验报告 - 8 -
int Get2(nodetype *h,char e)
{
nodetype *p=h;
while(p->data!=e)
{
p=p->next->next;
if(p->next==NULL)
return FALSE;
}
return TRUE;
};
//对各字符元素进行排序 void paixu(nodetype *h)
{
node *r,*q,*small;
char temp;
for(r=h->next;r->next!=NULL;r=r->next)
{
small=r;
for(q=r->next;q;q=q->next) /*找到链表中最小字符*/
if(q->datadata)
small=q;
if(small!=r)
{
temp=r->data;
r->data=small->data; /*把最小的数值换到P指针所指的位置数值上(原P
指针的next指向不变)*/
small->data=temp; /*把原先p指针所指位置的数值填入被置换出的最
小字符位置*/
}
}
} ;
《 数据结构 》实验报告 - 9 -
//对表进行插入操作
void show(nodetype *head) {
node *p;
p=head->next;
while(p!=NULL)
{
cout<data<<" ";
p=p->next;
}
cout<m||i<0) return NULL;
else
{
while (p!=NULL&&jnext;
}
return p;
}
};
nodetype *cins(nodetype *h,int i,char x,int m)
{
nodetype *p,*s;
s=(nodetype *)malloc(sizeof(nodetype));
s->data=x;s->next=NULL;
《 数据结构 》实验报告 - 10 -
if(i==0)
{
s->next=h;h=s;
}
else
{
p=search(h,i,m);
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
else
cout<<"输入的i值不正确"<next;free(p);
}
else
{
p=search(h,i,m);
if(p!=NULL&&p->next!=NULL)
《 数据结构 》实验报告 - 11 -
{s=p->next;p->next=s->next;free(s);}
else
{
cout<<"输入的i值不正确"<next;
}
length--;
int f2=1;
int f1=1;
while(f2)
{
cout<<"遍历:1 ";
cout<<"查找:2 ";
《 数据结构 》实验报告 - 12 -
cout<<"插入字符:3 ";
cout<<"删除结点:4 ";
cout<<"链表长度:5 ";
cout<<"查找字符:6 ";
cout<<"清屏:7 ";
cout<<"EXIT:0\n";
flag=1;
while(flag)
{
cout<<"请选择: ";
cin>>select;
switch(select)
{
case 2:
while(f1)
{
cout<<"请输入位置i: ";
cin>>i;
if(!(i>0&&i<=length)) cout<<"位置错误!"<>q;
《 数据结构 》实验报告 - 13 -
a=cins(a,1,q,n);
paixu(a);
cout<<"插入成功,链表值为:"<>y;
a=del(a,y,n);
cout<<"操作后链表值为: ";
show(a);
f2=0;
break;
case 5:
cout<<"该链表的长度为:"<>e;
cout<
#include
#include
#include
#define TRUE 1
#define FALSE 0
int length=0;
typedef struct node
{
char data;
struct node *next;
}nodetype,*Listlink;
//进行头插法创建链表
void create(Listlink *head,int n)
《 数据结构 》实验报告 - 15 -
{
cout<<"用头插法建立单链表,请输入链表数据,以$结束!";
int i;
Listlink p;
char c;
cout<<"(按照头插法插入)"<next=NULL;
int flag=1;
while(flag) /* flag初值为1,当输入"$"时,置flag为0,建表结束*/
{
cin>>c;
if(c!='$')
{
p=(Listlink)malloc(sizeof(struct node));/*建立新结点s*/
p->data=c;
p->next=(*head)->next;/*将s结点插入表头*/
(*head)->next=p;
}
else
flag=0;
i++;
}
};
//按位置查找
int Get1(nodetype *h,int i)
{
int j;
nodetype *p=h;
j=0;
while((p->next!=NULL)&&(jnext;
j++;
}
if(i==j)
cout<data;
else
return FALSE;
};
//查找与已知字符e相同的结点
int find(nodetype *h,char e) {
nodetype *p=h;
while(p->data!=e)
{
p=p->next;
if(p->next==NULL)
return FALSE;
}
return TRUE;
};
//对各字符元素进行排序
void paixu(nodetype *h) {
node *r,*q,*small;
char temp;
for(r=h->next;r->next!=NULL;r=r->next)
{
small=r;
for(q=r->next;q;q=q->next) /*找到链表中最小字符*/
if(q->datadata)
《 数据结构 》实验报告 - 17 -
small=q;
if(small!=r)
{
temp=r->data;
r->data=small->data; /*把最小的数值换到P指针所指的位置数值上(原P
指针的next指向不变)*/
small->data=temp; /*把原先p指针所指位置的数值填入被置换出的最
小字符位置*/
}
}
} ;
//对表进行插入操作
void show(nodetype *head)
{
node *p;
p=head->next;
while(p!=NULL)
{
cout<data<<" ";
p=p->next;
}
cout<m||i<0) return NULL;
else
{
while (p!=NULL&&jnext;
}
return p;
}
};
nodetype *insert(nodetype *h,char q)
{
nodetype *p=h,*s,*d=h;
p=p->next ;
s=(nodetype *)malloc(sizeof(nodetype));
s->data=q;
s->next =p;
d->next=s;
length++;
return h;
};
nodetype *input(nodetype *h,int i,char x,int m) //x输入的字符
{
nodetype *p,*s;
s=(nodetype *)malloc(sizeof(nodetype));
s->data=x;s->next=NULL;
if(i==0)
{
s->next=h;h=s;
}
else
{
p=search(h,i,m);
if(p!=NULL)
{
s->next=p->next;
《 数据结构 》实验报告 - 19 -
p->next=s;
}
else
cout<<"输入的i值不正确"<length)
{ cout<<"输入的i值不正确"<next ;
j++;
}
s=p->next;
p->next=p->next->next;
free(s);
}
length--;
return h;
};
《 数据结构 》实验报告 - 20 -
void main()
{
int i,flag=1;
int select;
Listlink a;
int n,y;
char q,e;
create(&a,n);
nodetype *b=a;
while( b!=NULL )
{
length++;
b=b->next;
}
length--;
int f2=1;
int f1=1;
while(f2)
{
cout<<"遍历:1 ";
cout<<"查找:2 ";
cout<<"插入字符:3 ";
cout<<"删除结点:4 ";
cout<<"链表长度:5 ";
cout<<"查找字符:6 ";
cout<<"清屏:7 ";
cout<<"EXIT:0\n";
flag=1;
while(flag)
{
《 数据结构 》实验报告 - 21 -
cout<<"请选择: ";
cin>>select;
switch(select)
{
case 2:
while(f1)
{
cout<<"请输入位置i: ";
cin>>i;
if(!(i>0&&i<=length)) cout<<"位置错误!"<>q;
a=insert(a,q);
paixu(a);
cout<<"插入成功,链表值为:"<>y;
《 数据结构 》实验报告 - 22 -
a=del(a,y);
cout<<"操作后链表值为: ";
show(a);
f2=0;
break;
case 5:
cout<<"该链表的长度为:"<>e;
if( find(a,e) )
cout<<'1';
else
cout<<'0';
cout<
本文档为【数据结构 顺序表,链表源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。