信管0805 彭信儒 012158.docx
《信管0805 彭信儒 012158.docx》由会员分享,可在线阅读,更多相关《信管0805 彭信儒 012158.docx(29页珍藏版)》请在冰豆网上搜索。
信管0805彭信儒012158
北京信息科技大学
信息管理学院
实验报告
课程名称数据结构
实验项目数据结构中的线性结构
实验仪器PC机一台
专业信息管理信息系统
班级/学号信管0805|2008012158
学生姓名彭信儒
实验日期2009年10月
实验地点小营计算中心
成绩
指导教师王晓蓉
北京信息科技大学
信息管理学院
(数据结构)实验报告
实验课程名称:
数据结构专业:
信息管理信息系统班级:
信管0805学号:
2008012158姓名:
彭信儒
实验名称
线性结构
实验地点
小营计算中心
实验时间
8机时
1.实验目的:
掌握线性结构中的线性表、栈和队列的类型定义、存储形式(线性存储和链式存储),熟练掌握相关类型的特征及主要操作实现算法。
能根据题目要求完成程序设计并能正常运行。
2.实验内容:
1.用顺序表完成一个班级的10个学生的信息(包括:
学号、姓名、性别、入学成绩)管理:
能够显示、增加、删除、查询学生的指定信息(如:
姓名或成绩)。
2.利用单向链表完成对一组(如5个)整型数据的信息管理:
能够增加、删除、修改(按位置或值)指定的数据结点。
3.利用单向链表完成将两个有序线性表合并为新的有序单向链表。
4.利用顺序栈完成初始化栈、入栈、出栈和显示栈内元素的操作。
5.利用链栈完成初始化栈、入栈、出栈和显示栈内元素的操作。
6.利用链队列完成初始化队列、入队、出队和显示队内元素的操作。
3.实验要求:
上机前认真阅读实验内容,在理解的基础上写出所有程序代码。
应尽量使用注释说明、使用缩进格式以增加程序的可读性。
4.实验准备:
硬件:
PC机一台
软件:
VC6.0
数据结构实验模板
5.实验过程:
1.
#include
usingnamespacestd;
structstudent
{
intnum;
charname[20];
charsex[10];
intchj;
};
typedefstruct
{
student*elem;
intlength;
}sqlist;
voidmenu(sqlist&l);
voidshow(sqlist&l);
voidadd(sqlist&l);
voiddel(sqlist&l);
voidch(sqlist&l);
intmain()
{
sqlistl;
student*p;
l.elem=(student*)malloc(100*sizeof(student));
p=l.elem;
l.length=0;
for(inti=1;i<=2;i++)
{
cout<<"请输入第"<
"<cin>>p->num;
cin>>p->name;
cin>>p->sex;
cin>>p->chj;
p++;
l.length++;
}
menu(l);
return0;
}
voidmenu(sqlist&l)
{
inti;
charj;
cout<<"请选择您要进行的操作:
1.显示2.增加3.删除4.查询"<cin>>i;
if(i==1)
{
show(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==2)
{
add(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==3)
{
del(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==4)
{
ch(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
}
voidshow(sqlist&l)
{
for(inti=1;i<=l.length;i++)
{
cout<<"第"<
"<cout<<"学号:
"<cout<<"姓名:
"<cout<<"性别:
"<cout<<"成绩:
"<}
}
voidadd(sqlist&l)
{
inti;
student*s,*p;
cout<<"请输入元素的插入位置:
"<cin>>i;
p=&(l.elem[i-1]);
for(s=&(l.elem[l.length-1]);s>=p;--s)
{
*(s+1)=*s;
}
cout<<"请输入学生的信息(学号、姓名、性别、成绩):
"<cin>>p->num;
cin>>p->name;
cin>>p->sex;
cin>>p->chj;
p=s;
l.length++;
}
voiddel(sqlist&l)
{
inti;
student*p,*q;
cout<<"请输入要删除的元素位置:
"<cin>>i;
p=&(l.elem[i-1]);
q=l.elem+l.length-1;
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
l.length--;
}
voidch(sqlist&l)
{
intx;
cout<<"请输入要查询的学生学号:
"<cin>>x;
for(inti=1;i<=l.length;i++)
{
if(l.elem[i-1].num==x)
{
cout<<"被查询同学的信息:
"<cout<<"学号:
"<cout<<"姓名:
"<cout<<"性别:
"<cout<<"成绩:
"<}
}
}
2.
#include
usingnamespacestd;
typedefstructlnode
{
intdata;
structlnode*next;
}lnode,*linklist;
voidmenu(linklist&l);
voidshow(linklist&l);
voidadd(linklist&l);
voiddel(linklist&l);
voidxg(linklist&l);
intmain()
{
linklistl,m,n;
intx,e;
l=(linklist)malloc(sizeof(lnode));
l->next=NULL;
n=l;
cout<<"请输入要输入的数的个数:
";
cin>>x;
for(inti=1;i<=x;i++)
{
cout<<"请输入第"<
";
cin>>e;
m=(linklist)malloc(sizeof(lnode));
m->data=e;
n->next=m;
m->next=NULL;
n=n->next;
}
menu(l);
return0;
}
voidmenu(linklist&l)
{
inti;
charj;
cout<<"请选择您要进行的操作:
1.显示2.增加3.删除4.修改"<cin>>i;
if(i==1)
{
show(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==2)
{
add(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==3)
{
del(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
if(i==4)
{
xg(l);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(l);
}
if(j=='n')
{
system("cls");
}
}
}
voidshow(linklist&l)
{
linklistp;
p=l->next;
while(p)
{
cout<data<<"";
p=p->next;
}
cout<}
voidadd(linklist&l)
{
linklistp,s;
inte,i,j=0;
cout<<"请输入要添加的数的位置:
";
cin>>i;
p=l;
while(p&&j{
p=p->next;
j++;
}
cout<<"请输入要添加的数:
";
cin>>e;
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
}
voiddel(linklist&l)
{
linklistp,q;
inti,j=0;
cout<<"请输入要删除的数的位置:
";
cin>>i;
p=l;
while(p->next&&j{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
}
voidxg(linklist&l)
{
linklistp;
inte,i,j=0;
cout<<"请输入要修改的数的位置:
";
cin>>i;
p=l;
while(p->next&&j<=i-1)
{
p=p->next;
j++;
}
cout<<"请输入修改的数:
";
cin>>e;
p->data=e;
}
3.
#include
usingnamespacestd;
typedefstructlnode
{
intdata;
structlnode*next;
}lnode,*linklist;
intmain()
{
linklistla,lb,lc,x,y,p,q;
linklistpa,pb,pc;
linklists;
intm,n,e,f;
la=(linklist)malloc(sizeof(lnode));
la->next=NULL;
lb=(linklist)malloc(sizeof(lnode));
lb->next=NULL;
lc=(linklist)malloc(sizeof(lnode));
lc->next=NULL;
x=la;
cout<<"请输入要输入的数的个数:
";
cin>>m;
for(inti=1;i<=m;i++)
{
cout<<"请输入第"<
";
cin>>e;
y=(linklist)malloc(sizeof(lnode));
y->data=e;
x->next=y;
y->next=NULL;
x=x->next;
}
p=lb;
cout<<"请输入要输入的数的个数:
";
cin>>n;
for(intj=1;j<=n;j++)
{
cout<<"请输入第"<";
cin>>f;
q=(linklist)malloc(sizeof(lnode));
q->data=f;
p->next=q;
q->next=NULL;
p=p->next;
}
pa=la->next;pb=lb->next;lc=pc=la;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa)
{
pc->next=pa;
}
else
{
pc->next=pb;
}
free(lb);
s=lc->next;
while(s)
{
cout<data<<"";
s=s->next;
}
cout<return0;
}
4.
#include
usingnamespacestd;
typedefstruct
{
int*base;
int*top;
intstacksize;
}sqstack;
voidmenu(sqstack&s);
voidadd(sqstack&s);
voiddel(sqstack&s);
voidshow(sqstack&s);
intmain()
{
sqstacks;
intx,e;
s.base=(int*)malloc(100*sizeof(int));
s.top=s.base;
s.stacksize=100;
cout<<"请输入元素个数:
";
cin>>x;
for(inti=1;i<=x;i++)
{
cout<<"请输入第"<
";
cin>>e;
*s.top=e;
s.top++;
}
menu(s);
return0;
}
voidmenu(sqstack&s)
{
inti;
charj;
cout<<"请选择您要进行的操作:
1.增加2.删除3.显示"<cin>>i;
if(i==1)
{
add(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
if(i==2)
{
del(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
if(i==3)
{
show(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
}
voidadd(sqstack&s)
{
inte;
cout<<"请输入要添加的元素:
";
cin>>e;
*s.top=e;
s.top++;
}
voiddel(sqstack&s)
{
if(s.base==s.top)
{
cout<<"抱歉,此栈已为空栈。
"<}
else
{
s.top--;
}
}
voidshow(sqstack&s)
{
int*p;
p=s.top;
while(p!
=s.base)
{
p--;
cout<<*p<<"";
}
cout<}
5.
#include
usingnamespacestd;
typedefstructnode
{
intdata;
structnode*next;
}node,*linkstack;
voidmenu(linkstack&s);
voidadd(linkstack&s);
voiddel(linkstack&s);
voidshow(linkstack&s);
intmain()
{
linkstacks,p;
intx,e;
s=NULL;
cout<<"请输入元素个数:
";
cin>>x;
for(inti=1;i<=x;i++)
{
cout<<"请输入第"<
";
cin>>e;
p=(linkstack)malloc(sizeof(node));
p->data=e;
p->next=s;
s=p;
}
menu(s);
return0;
}
voidmenu(linkstack&s)
{
inti;
charj;
cout<<"请选择您要进行的操作:
1.增加2.删除3.显示"<cin>>i;
if(i==1)
{
add(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
if(i==2)
{
del(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
if(i==3)
{
show(s);
cout<<"是否进行其他操作?
(y/n)"<cin>>j;
if(j=='y')
{
menu(s);
}
if(j=='n')
{
system("cls");
}
}
}
voidadd(linkstack&s)
{
inte;
linkstackp;
cout<<"请输入要添加的元素:
";
cin>>e;
p=(linkstack)malloc(sizeof(node));
p->data=e;
p->next=s;
s=p;
}
voiddel(linkstack&s)
{
linkstackp;
if(s==NULL)
{
cout<<"抱歉,此链栈已为空栈。
"<}
p=s;
s=p->next;
free(p);
}
voidshow(linkstack&s)
{
linkstackp;
p=s;
while(p)
{
cout<data<<"";
p=p->next;
}
cout<}
6.
#include
usingnamespacestd;
typedefstructqnode
{
intdata;
structqnode*next;
}qnode,*queueptr;
typedefstruct
{
queueptrfront;
queueptrrear;
}linkqueue;
voidmenu(linkqueue&Q);
voidadd(linkqueue&Q);
voiddel(linkqueue&Q);
voidshow(linkqueue&Q);
intmain()
{
linkqueueQ;
queueptrp;
intx,e;
Q.front=Q.rear=(queueptr)malloc(sizeof(qnode));
Q.front->next=NULL;
cout<<"请输入元素个数:
";
cin>>x;
for(inti=1;i<=x;i++)
{
cout<<"请输入第"<
";
cin>>e;
p=(queueptr)malloc(sizeof(qnode));
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
menu(Q);
return0;
}
voidmenu(linkqueue&Q)
{
inti;
charj;
cout<<"请选择您要进行的操作: