重庆邮电大学-软件技术基础--实验报告(耿道渠) 本文关键词:重庆,软件技术,邮电大学,实验,基础
重庆邮电大学-软件技术基础--实验报告(耿道渠) 本文简介:《软件技术基础》实验报告实验名称:顺序表的操作班级学号姓名第9周星期2、5,6节成绩一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。二、实验内容:1
重庆邮电大学-软件技术基础--实验报告(耿道渠) 本文内容:
《软件技术基础》实验报告
实验名称:顺序表的操作
班
级
学
号
姓
名
第
9
周
星
期
2
、
5,6
节
成
绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:
(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
第一次编写C++,感觉力不从心,回去多看看PPT。
五、实验心得体会:
对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习
附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)
#include
#include
#include
#include
#define
MAXSIZE
20
using
namespace
std;
int
num;
typedef
struct
{
string
student_number;
string
name;
string
tel;
string
home_phone;
int
id;
}
TEL;
void
shuaxin(TEL);
void
delet(TEL);
void
find(TEL);
void
show(TEL);
int
main(void)
{
int
choose;
TEL
List[MAXSIZE];
while(1)
{
cout
>
choose;
system(“cls“);
while(
choose
4)
{
cout
>
choose;
system(“cls“);
}
switch(choose)
{
case
1:
shuaxin(List);
break;
case
2:delet(List);
break;
case
3:find(List);
break;
case
4:
show(List);
break;
}
//system(“cls“);
}
return
0;
}
void
shuaxin(TEL
list)
{
int
i,j;
for(i
=
0;
i
>
num;
while(
num
MAXSIZE
)
{
system(“cls“);
cout
>
num;
}
system(“cls“);
cout
>
list[j
-
1].student_number;
cin
>>
list[j
-
1].name;
cin
>>
list[j
-
1].tel;
cin
>>
list[j
-
1].home_phone;
cout
>
j;
while(
j
num)
{
cout
>
j;
}
while(list[i].id
!=
j)
i++;
for(j
=
i;
j
>
telnum;
system(“cls“);
for(i
=
0;
i
#include
#include
struct
LNode
{
int
data;
struct
LNodenext;
};
LNodefind(LNodehead,int
x)
{
LNodep=head->next;
while(p!=NULL
return
p;
}
void
Insert(LNodehead,int
i,int
x)
{
if(inext;
k++;
}
if(p==NULL)
coutdata=x;
s->next=p->next;
p->next=s;
}
}
}
void
Delete(LNodehead,int
i)
{
if(inext;
k++;
}
if(p==NULL)
coutnext=p->next;
delete
p;
}
}
}
void
main()
{
LNodehead,*p;
head=new
LNode;
head->next=NULL;
int
i,x,y;
cout>x;
Insert(head,i,x);
}
i=0;
cout>i;
Delete(head,i);
coutnext;
while(p!=NULL)
{
coutdatanext;
}
cout>x;
if(find(head,x)!=NULL)
cout>i>>x;
Insert(head,i,x);
coutnext;
while(p!=NULL)
{
coutdatanext;
}
cout
#include
#include
#include
#define
LEN
sizeof(TEL)
#define
SIZE
sizeof(Size)
int
n
=
0;
typedef
struct
tel
{
char
name[10];
long
num;
struct
tel
next;
}TEL;
typedef
struct
tel_size
{
char
name[10];
long
num;
}Size;
TEL
search(void);//从文件读取
TEL
insert(TELhead);//插入
TEL
del(TEL
head);//删除
void
showall(TEL
head);//输出到屏幕
void
find_name(TEL
head);//通过名字查找
void
find_number(TEL
head);//通过号码查找
TEL
revise(TEL
head);
void
sav(TEL
head);//储存
int
main(void)
{
TEL
head
=
NULL;
int
choose;
printf(“welcome
to
this
telphone
number
system/n“);
head
=
search();
printf(“1.insert/n“);
//选择显示界面
printf(“2.del/n“);
printf(“3.showall/n“);
printf(“4.find_name/n“);
printf(“5.find_number/n“);
printf(“6.revise/n“);
printf(“7.save/n“);
printf(“8.end/n“);
do
//选择项
{
printf(“please
choose
your
choose:/n“);
scanf(“%d“,switch(choose)
{
case
1:head
=
insert(head);break;
case
2:head
=
del(head);break;
case
3:showall(head);break;
case
4:find_name(head);break;
case
5:find_number(head);break;
case
6:head
=
revise(head);break;
case
7:sav(head);break;
case
8:return
0;
default:printf(“input
wrong!/n“);
printf(“/n“);
}
}while(1);
return
0;
}
TEL
search(void)//寻找文件是否存在函数
{
FILE
fp;
TEL
head
=
NULL;
TEL
p2,*
p1;
p1
=
p2
=
(TEL)malloc(LEN);
if(
(
fp
=
fopen(“TELnumber.txt“,“a+“)
)
==
NULL)//打开或者新建文件
{
printf(“cant
open
file!/n“);
exit(0);
}
fseek(fp,0L,0);//文件指针倒回到开头
while(!feof(fp))
{
if(
fread(p1,SIZE,1,fp)
!=
1
)//需要防止读出错误情况
break;
if(head
==
NULL)
head
=
p1;
else
p2->next
=
p1;
p2
=
p1;
n++;
p1
=
(TEL)malloc(LEN);
}
free(p1);
p2->next
=
NULL;
fclose(fp);
return
head;
}
TEL
insert(TEL
head)//插入新号码函数
{
TEL
p0,*
p1,*
p2;
p0
=
(TEL)malloc(LEN);
printf(“please
input
a
name
and
number:/n“);
scanf(“%s
%ld“,p0->name,p1
=
head;
p2
=
p1;
if(head
==
NULL)
{
head
=
p0;
p0->next
=
NULL;
}else
{
while(
strcmp(p0->name,p1->name)
>
0
p1
=
p1->next;
}
if(
strcmp(p0->name,p1->name)
next
=
p0;
p0->next
=
p1;
}else
{
p1->next
=
p0;
p0->next
=
NULL;
}
}
n++;
return
head;
}
TEL
del(TEL
head)//删除函数
{
TEL
p1,*
p2;
p1
=
head;
long
dele;
printf(“please
input
what
number
do
you
want
to
del:/n“);//输入删除的电话号码
scanf(“%ld“,if(head
==
NULL)
printf(“NULL
list!/n“);//空表情况
else
{
while(dele
!=
p1->num
p1
=
p1->next;
}
}
if(dele
==
p1->num)
{
if(dele
==
head->num)//删除在头部情况
head
=
head->next;
else
p2->next
=
p1->next;
//输出删除的数据并用链表架空
printf(“dele
this
person
number:/n“);
printf(“%10s
%15ld“,p1->name,p1->num);
n--;
}else
printf(“cant
find
this
person!/n“);//没找到情况
return
head;
}
void
showall(TEL
head)//打印函数
{
int
i
=
0;
TEL
p;
p
=
head;
if(head
==
NULL)
printf(“NULL
list!/n“);//空表情况
else
{
printf(“there
is
%d
number:/n“,n);
printf(“name
number
/n“);
do
{
i++;
printf(“%d.
%10s
%15ld/n“,i,p->name,p->num);
p
=
p->next;
}while(p
!=
NULL);
}
}
void
find_name(TEL
head)//以名字方式寻找号码
{
TEL
p;
int
dis
=
0;
char
f_name[20];
p
=
head;
printf(“please
input
a
name:/n“);//输入名字
scanf(“%s“,f_name);
if(head
==
NULL)
printf(“NULL
list!/n“);//空表情况
else
{
do
{
if(strcmp(p->name,f_name)
==
0)//只要找到同名
均输出
{
dis
=
1;
printf(“find
this
person:/n“);
printf(“%s
%15ld/n“,p->name,p->num);
}
p
=
p->next;
}while(p
!=
NULL);
}
if(dis
==
0)
printf(“cant
find
this
person!/n“);
}
void
find_number(TEL
head)//以号码方式寻找号码
{
TEL
p;
long
f_num;
int
dis
=
0;//dis作为判定是否找到变量
p
=
head;
printf(“please
input
a
number/n“);//输入号码
scanf(“%ld“,if(head
==
NULL)
printf(“NULL
list!/n“);//空表情况
else
{
do
{
if(f_num
==
p->num)
{
dis
=
1;
break;
}
else
p
=
p->next;
}while(p
!=
NULL);
}
if(dis
==
1)
{
printf(“find
this
person:/n“);
printf(“%s
%15ld/n“,p->name,p->num);
}
else
printf(“cant
find
this
person!/n“);
}
TEL
revise(TEL
head)//修改函数
{
TEL
p
=
head;
int
choose,num,i;
printf(“please
choose
which
do
you
want
to
revise,input
the
number/n“);
//find_name(TEL
head);
scanf(“%d“,for(i
=
2;
i
next;
printf(“1.revise
name/n“);
printf(“2.revise
telephone
number/n“);
scanf(“%d“,switch(choose)
{
case
1:{
printf(“please
input
new
name/n“);
scanf(“%s“,p->name);
break;
}
case
2:{
printf(“please
input
new
telephone
number/n“);
scanf(“%ld“,break;
}
}
return
head;
}
void
sav(TEL
head)//储存函数
{
FILE
fp;
TEL
p;
if(
(
fp
=
fopen(“TELnumber.txt“,“a+“)
)
==
NULL)//打开或者新建文件
{
printf(“cant
open
file!/n“);
exit(0);
}
p
=
head;
while(p
!=
NULL)
{
if(
fwrite(p,SIZE,1,fp)
==
1
)
p
=
p->next;
else
{
printf(“save
wrong!/n“);
exit(0);
}
}
fclose(fp);
}
《软件技术基础》实验报告
实验名称:栈的操作
班
级
学
号
姓
名
第
1
2
周
星
期
2
、
5,6
节
成
绩
一、实验目的:
掌握栈的的定义和运算,了解栈的应用。
二、实验内容:
1、堆栈的测试和应用。要求:
设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。
三、实验结果:
四、实验中遇到的问题及解决方法:
问题不是太多,但是编写过程还是比较艰辛。
五、实验心得体会:
栈在本书中比较重要,要多多理解书本知识,多问老师,多实践。
附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)
#include
#include
#define
MAX_SIZE
30
using
namespace
std;
struct
SqStack
{
intdata;
int
top;
int
stacksize;
};
int
InitStack(SqStack,int);
void
push(SqStack,int);
void
del(SqStack);
int
main(void)
{
int
choose,size;
int
in,i;
SqStack
p;
cout
>
size;
while(InitStack(
}
system(“cls“);
while(1)
{
cout
>
choose;
while(choose
4)
{
cout
>
choose;
}
system(“cls“);
switch(choose)
{
case
1:cout
>
in;
push(break;
case
2:
del(
break;
case
3:cout
-1)
{
cout
0
s->top
=
-1;
s->data
=
new
int[size];
return
0;
}else
cout
top
stacksize
-
1)
{
s->top++;
s->data[s->top]
=
x;
}else
cout
top
>
-1)
{
x
=
s->data[s->top];
s->top--;
cout
#include
using
namespace
std;
struct
QNode
{
int
data;
struct
QNodenext;
};
struct
LinkQueue
{
struct
QNodefront;
struct
QNoderear;
};
void
init(LinkQueue
int
Queuelenth(LinkQueue
void
EnQueue(LinkQueue
void
DeQueue(LinkQueue
int
main(void)
{
LinkQueue
Q;
int
choose,x,e;
init(Q);
while(1)
{
cout
>
choose;
while(choose
>
3
||
choose
>
choose;
}
switch(choose)
{
case
1:
system(“cls“);
cout
>
x;
EnQueue(Q,x);
break;
case
2:
system(“cls“);
DeQueue(Q);
break;
case
3:
system(“cls“);
x
=
Queuelenth(Q);
cout
next
=
NULL;
Q.rear
=
Q.front;
}
int
Queuelenth(LinkQueue
int
len
=
0;
while(p
!=
Q.rear)
{
len++;
p
=
p->next;
}
return
len;
}
void
EnQueue(LinkQueue
if(Q.rear->next
==
Q.front)
cout
next
=
NULL;
q->data
=
x;
Q.rear->next
=
q;
Q.rear
=
q;
}
}
void
DeQueue(LinkQueue
if(Q.front
==
Q.rear)
cout
next;
e
=
Q.front->data;
cout
#include
#include
#include
#define
maxsize
200
typedef
char
datatype;
typedef
struct
node{
datatype
data;
struct
nodelchild,*rchild;
}
bitree;
bitreecreat()
{
char
ch;
bitreeQ[maxsize];
int
front,rear;
bitreeroot,*s;
root=NULL;
front=1;rear=0;
printf(“请输入二叉树的各节点,@表示虚节点,#表示结束:/n“);
scanf(“%c“,while(ch!=
#
)
{
putchar(ch);
s=NULL;
if(ch!=
@
)
{
s=(bitree)malloc(sizeof(bitree));
s->data=ch;
s->lchild=NULL;
s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)
root=s;
else
{
if(s
else
Q[front]->rchild=s;
if(rear%2==1)
front++;
}
scanf(“%c“,}
return
root;
}
void
preorder(bitreep)
{
if(p!=NULL)
{
printf(“%c“,p->data);
preorder(p->lchild);
preorder(p->rchild);
}
return;
}
void
inorder(bitreep)
{
if(p!=NULL)
{
inorder(p->lchild);
printf(“%c“,p->data);
inorder(p->rchild);
}
return;
}
void
postorder(bitreep)
{
if(p!=NULL)
{
postorder(p->lchild);
postorder(p->rchild);
printf(“%c“,p->data);
}
return;
}
void
main()
{
bitreeroot;
int
num;
char
t;
while(1)
{
cout>num;
if(num4)
{
cout>num;
}
system(“cls“);
switch(num)
{
case
1:
root=creat();
getchar();
break;
case
2:
cout
using
namespace
std;
const
int
MAX_SIZE
=
30;
class
Data
{
private: