数据结构实验二 线性表文档格式.docx
- 文档编号:16633629
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:20
- 大小:111.82KB
数据结构实验二 线性表文档格式.docx
《数据结构实验二 线性表文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验二 线性表文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
2.
用线性表实现一个通讯录的基本操作:
4、数据结构设计
①问题一求一元多项式Pn(x)=P0+P1x+P2x2+```+Pnxn的一阶导数。
一元多项式是个和式,其中每一项由系数和指数幂确定。
因此,可用下列线性表来表示:
((p1,e1),(p2,e2),……(pn,en))。
线性表的每个元素含有两个数据项:
一个数据p,另一个指数幂e。
存储结构链式,顺序式均可。
若为链式存储,结点结构如下:
coef
exp
next
其中:
coef为系数域,存放非零项的系数;
Exp为指数域,存放非零项的指数;
next为指针域,存放指向下一结点的指针。
②问题二用线性表实现一个通讯录的基本操作:
通讯录可以看成一个单向链表,其中每一个结点就是一个人名和电话数据。
这里采用链式存储,结点结构如下:
name[10]
number
name为联系人的姓名,存放的是字符串;
Number为联系人的电话号码,存放的是double型的数据。
5、算法设计
Step1:
初始化
1:
结构体定义:
structnode
{
floatcoef;
//定义系数
intexp;
//定义指数
node*next;
//指针域
};
2:
定义空链表:
node*Head_Create()//定义首结点
{
node*Head;
Head=newnode;
Head->
next=NULL;
returnHead;
}
3:
删除链表:
voiddeletechain(node*h)//释放内存
node*p;
while(h)
{
p=h;
h=h->
next;
deletep;
}
h=NULL;
4:
多项式显示:
node*show(node*Head)
p=Head->
while(p!
=NULL)
cout<
<
p->
coef<
"
x^"
exp<
'
\t'
;
p=p->
5:
多项式建立:
node*create(node*Head)
Node*p;
inta;
floatb;
Head=NULL;
while(a)
p=newnode;
输入系数和指数:
endl;
cin>
>
a>
b;
p->
coef=a;
exp=b;
next=Head;
Head=p;
6:
函数求导表示:
Node*root(node*Head)
next;
if(p->
exp!
=0)//系数不为零时进行求导
{
p->
coef=p->
coef*p->
exp;
p->
exp=p->
exp-1;
//求导后系数变为原来的系数乘以指数,
指数变为原来的指数减一
}
elsep->
coef=0;
1.建立一个链表来存放数据:
structnode{//创建链表
charname[10];
doublenumber;
2.插入记录的函数,用来初始化链表:
node*new_chain(){//插入记录
node*h=NULL,*p,*tail;
cout<
初始化通讯录时插入的记录是:
姓名"
电话"
p=newnode;
strcpy(p->
name,"
Tom"
)<
number=123;
number<
tail=h=p;
Jerry"
number=456;
tail->
next=p,tail=p;
next=NULL;
returnh;
}
3.添加记录,可以添加任意多个数据:
node*input(node*h){//添加记录
node*p,*tail;
inti,n;
输入想添加的联系人个数:
cin>
n;
for(i=0;
i<
i++)
name>
number;
if(!
h)tail=h=p;
elsetail->
if(h)tail->
4.查找某个联系人的函数,这里附加了一个判断联系人总数的函数:
intchain_length(constnode*head){
intnum=1;
while(head)
{
head=head->
num++;
returnnum;
voidsearch_people(constnode*head){//查找第i个记录
intnum=1,i;
您想查询第几个数据?
i="
i;
if(i>
0&
&
chain_length(head)){
while(head)
{
if(num==i){
cout<
第"
个数据是:
head->
name<
}
head=head->
num++;
else{
endl<
超出范围,请重新输入!
search_people(head);
}
5.删除某一个特定的联系人,根据输入的名字来判别:
node*delete_one_node(node*head){//删除某一个特定数据
charpeople[10];
请输入你要删除的人名:
people;
node*p1,*p2;
if(head==NULL){
链表为空,无法删除!
returnNULL;
if(!
strcmp(head->
name,people)){
已删除了"
的数据"
p1=head;
head=head->
deletep1;
p2=p1->
while(strcmp(p2->
name,people)&
p2->
next!
=NULL){
p1=p2;
p2=p2->
strcmp(p2->
p1->
next=p2->
cout<
p2->
deletep2;
elsecout<
没有找到要删除的数据!
6.输出通讯录中的所有记录,即:
遍历链表:
voidoutput(constnode*head){//输出通讯录中的记录
通讯录里的数据是:
7.释放链表空间:
voiddeletechain(node*h){//释放结点空间
while(h){
6.运行与测试
------------------------------①问题一程序代码:
---------------------------
#include<
iostream>
usingnamespacestd;
node*Head_Create()//定义首结点
node*create(node*Head)//多项式建立
floata;
intb;
node*root(node*Head)//求导后的结果
while(p)
coef=(p->
coef)*(p->
exp);
node*show(node*Head)//多项式的输出
inti=0;
if(i!
=0){
+"
0){
('
)'
elseif(p->
coef>
else{
0"
i=1;
intmain(void)
Head=Head_Create();
Head=create(Head);
原函数输出为:
f(x)="
show(Head);
Head=root(Head);
求导后函数输出:
deletechain(Head);
-----------程序测试BY:
金凯----------"
return0;
------------------------------②问题二程序代码:
#include<
h=tail=p;
if(strcmp(head->
name,people)==0){
returnhead;
intmain()
node*head=NULL;
head=new_chain();
head=input(head);
output(head);
search_people(head);
head=delete_one_node(head);
deletechain(head);
7.试验总结及收获
通过本次试验,我学会正确使用单链表,懂得在程序中多项式求导的表示方法。
同时,我也明白了多项式的建立及其显示。
在调试阶段,我当建立链表后,应在使用结束时删除链表释放内存。
软件工程121金凯
2013年10月12日9:
25PM(完)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验二 线性表 数据结构 实验 线性