线性表大作业任务书.docx
- 文档编号:6385536
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:12
- 大小:67.50KB
线性表大作业任务书.docx
《线性表大作业任务书.docx》由会员分享,可在线阅读,更多相关《线性表大作业任务书.docx(12页珍藏版)》请在冰豆网上搜索。
线性表大作业任务书
作业1:
线性表
一、作业目的
1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。
2.掌握线性表的顺序存储结构的定义及其C语言的实现。
3.掌握线性表的链式存储结构——单链表的定义及其C语言的实现。
4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5.掌握线性表在链式存储结构——单链表的各种基本操作。
二、作业要求
1.认真阅读和掌握本实验的程序。
2.上机运行本程序。
3.保存和打印出程序的运行结果,并结合程序进行分析。
4.按照对线性表和单链表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。
三、作业内容
1.顺序表的操作
请编制C程序,利用顺序存储方式来实现下列功能:
根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行表的创建,数据的插入删除并在插入和删除数据后再输出线性表;最后在屏幕菜单中选择0,即可结束程序的运行。
分析:
当我们要在顺序表的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素一次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。
当要删除第i个元素时,也只需将第i个元素之后的所有元素前移一个位置。
算法描述:
对每个算法,都要写出算法的中文描述。
要求分别写出在第i个(从1开始计数)结点前插入数据为x的结点、删除指定结点、创建一个线性表。
打印线性表等的算法描述。
#include
#include
typedefstructlist
{inta[20];
intchangdu;
}sqlist;
voidinput(sqlist*l);
voidshuchu(sqlist*l);
voiddel(sqlist*l);
voidxg(sqlist*l);
voidlook(sqlist*l);
voidmain()
{sqlistl;
intk;
while
(1)
{
printf("1.输入2.修改\n");
printf("3.删除4.查找\n");
printf("5.输出0.退出\n");
printf("请输入功能代号");
scanf("%d",&k);
switch(k)
{
case1:
input(&l);break;
case2:
xg(&l);break;
case3:
del(&l);break;
case4:
look(&l);break;
case5:
shuchu(&l);break;
case0:
exit
(1);
}
}
}
//输入
voidinput(sqlist*l)
{
inti=0;
printf("输入长度");
scanf("%d",&l->changdu);
while(i
{scanf("%d",&l->a[i+1]);i++;
}
}
//输出
voidshuchu(sqlist*l)
{
inti=0;
printf("输出表\n");
while(i
{
printf("%d\n",l->a[i+1]);
i++;
}
}
//查找
voidlook(sqlist*l)
{
inti;
printf("输入要查找的位置");
scanf("%d",&i);
if(i>=0&&i<=l->changdu)
printf("%d\n",l->a[i]);
else
printf("输入有误");
}
//删除
voiddel(sqlist*l)
{
inti;
printf("输入要删除的位置");
scanf("%d",&i);
l->a[i]=l->a[i+1];
l->a[i+1]=l->a[i+2];
l->a[i+2]=0;
}
//修改
voidxg(sqlist*l)
{
inti;
printf("输入要修改的位置");
scanf("%d",&i);
if(i>0&&i<=l->changdu)
{
printf("输入要修改的数据");
scanf("%d",&l->a[i]);}
else
printf("输入有误");
}
2.单链表的操作
请编制C程序,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。
具体地说,就是要根据键盘输入的数据建立一个单链表;然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最后在屏幕菜单中选择0,即可结束程序的运行。
算法描述:
要求分别写出在带头结点的单链表中第i(从1开始计数)个位置之后插入元素、创建带头结点的单链表、在带头结点的单链表中删除第i个位置的元素、顺序输出单链表的内容等的算法描述。
#include
#include
typedefstructlist
{
intnum;
structlist*next;
}list,*Llist;
list*creat_head();//创ä¡ä建¡§一°?
个?
空?
表À¨ª
voidchuangjian(list*,int);//创ä¡ä建¡§一°?
个?
长¡è度¨¨为an的Ì?
线?
性?
链¢¡ä表À¨ª
voidcharu(list*,int,int);//插?
入¨?
一°?
个?
元a素?
intshanchu(list*,int);//删¦?
除y一°?
个?
元a素?
intchaxun(list*,int);//链¢¡ä表À¨ª查¨¦询¡¥
voidprint(list*);//打䨰印®?
链¢¡ä表À¨ª
voidmain()
{
list*head;
intn,n2;//链¢¡ä表À¨ª的Ì?
节¨²点Ì?
查¨¦询¡¥的Ì?
元a素?
intx,i;//插?
入¨?
的Ì?
元a素?
插?
入¨?
的Ì?
位?
置?
intb;//删¦?
除y元a素?
的Ì?
位?
置?
chartemp;//删¦?
除y整?
个?
链¢¡ä表À¨ªY/N
head=creat_head();
printf("输º?
入¨?
链¢¡ä表À¨ª的Ì?
节¨²点Ì?
个?
数ºy:
");
scanf("%d",&n);
printf("\n输º?
入¨?
数ºy据Y:
êo\n");
chuangjian(head,n);//创ä¡ä建¡§链¢¡ä表À¨ª
print(head);
printf("\n---------------------------------------------------------\n");
printf("\n进?
行D链¢¡ä表À¨ª插?
入¨?
元a素?
\n");
printf("\n输º?
入¨?
您¨²需¨¨要°a插?
入¨?
的Ì?
元a素?
:
");
scanf("%d",&x);
printf("\n输º?
入¨?
即¡ä将?
插?
入¨?
的Ì?
位?
置?
:
");
scanf("%d",&i);
charu(head,x,i);//插?
入¨?
元a素?
print(head);
printf("\n---------------------------------------------------------\n");
printf("\n进?
行D链¢¡ä表À¨ª删¦?
除y元a素?
\n");
printf("\n输º?
入¨?
即¡ä将?
删¦?
除y元a素?
的Ì?
位?
置?
:
");
scanf("%d",&i);
b=shanchu(head,i);//删¦?
除y元a素?
print(head);
printf("\n\n成¨¦功|删¦?
除y元a素?
:
êo%d",b);
printf("\n---------------------------------------------------------\n");
printf("\n进?
行D链¢¡ä表À¨ª查¨¦询¡¥\n");
printf("\n输º?
入¨?
即¡ä将?
查¨¦询¡¥的Ì?
元a素?
:
");
scanf("%d",&n2);
if(chaxun(head,n2)>0)//链¢¡ä表À¨ª查¨¦询¡¥
printf("找¨°到Ì?
了¢?
,ê?
在¨²第̨²%d的Ì?
位?
置?
上¦?
",chaxun(head,n2));
else
printf("没?
有®D找¨°到Ì?
!
");
printf("\n---------------------------------------------------------\n");
printf("\n是º?
否¤?
删¦?
除y整?
个?
链¢¡ä表À¨ª?
ê?
Y/N\n");
fflush(stdin);
scanf("%c",&temp);
if('Y'==temp)//删¦?
除y链¢¡ä表À¨ª
{
shanchu(head,n2);
printf("\n成¨¦功|删¦?
除y整?
个?
链¢¡ä表À¨ª\n");
}
}
//创ä¡ä建¡§一°?
个?
空?
链¢¡ä表À¨ª
list*creat_head()
{
list*p;
p=(Llist)malloc(sizeof(list));
if(NULL==p)
printf("内¨²存ä?
申¦¨º请?
失º¡ì败㨹!
ê?
");
else
{
p->next=NULL;
return(p);
}
}
//创ä¡ä建¡§一°?
个?
长¡è度¨¨为an的Ì?
线?
性?
链¢¡ä表À¨ª
voidchuangjian(list*head,intn)
{
list*p,*q;
inti;
p=head;
for(i=1;i<=n;i++)
{
q=(Llist)malloc(sizeof(list));
if(NULL==p)
printf("内¨²存ä?
申¦¨º请?
失º¡ì败㨹!
ê?
");
else
{
scanf("%d",&q->num);
q->next=NULL;
p->next=q;
p=q;
}
}
}
//插?
入¨?
一°?
个?
元a素?
voidcharu(list*head,intx,inti)
{
intj=0;
list*p,*s;
p=head;
while((p!
=NULL)&&(j { p=p->next; j++; } if(p==NULL)exit(0); s=(Llist)malloc(sizeof(list)); if(NULL==p) printf("内¨²存ä? 申¦¨º请? 失º¡ì败㨹! ê? "); else { s->num=x; s->next=p->next; p->next=s; } } //删¦? 除y一°? 个? 元a素? intshanchu(list*head,inti) { list*p,*q; intj=0; intx; p=head; while((p! =NULL)&&(j { p=p->next; j++; } if(p==NULL)exit(0); q=p->next; p->next=q->next; x=q->num; free(q); q=NULL; return(x); } //打䨰印®? 链¢¡ä表À¨ª voidprint(list*head) { list*p; for(p=head->next;p! =NULL;) { printf("%d",p->num); p=p->next; } } //链¢¡ä表À¨ª查¨¦询¡¥ intchaxun(list*head,intn) { list*p; inti=1; for(p=head->next;p! =NULL;) { if(n==p->num) { returni; } i++; p=p->next; } if(NULL==p) return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 作业 任务书
![提示](https://static.bdocx.com/images/bang_tan.gif)