线性表大作业任务书.docx

上传人:b****6 文档编号:6385536 上传时间:2023-01-05 格式:DOCX 页数:12 大小:67.50KB
下载 相关 举报
线性表大作业任务书.docx_第1页
第1页 / 共12页
线性表大作业任务书.docx_第2页
第2页 / 共12页
线性表大作业任务书.docx_第3页
第3页 / 共12页
线性表大作业任务书.docx_第4页
第4页 / 共12页
线性表大作业任务书.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

线性表大作业任务书.docx

《线性表大作业任务书.docx》由会员分享,可在线阅读,更多相关《线性表大作业任务书.docx(12页珍藏版)》请在冰豆网上搜索。

线性表大作业任务书.docx

线性表大作业任务书

作业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(ichangdu)

{scanf("%d",&l->a[i+1]);i++;

}

}

//输出

voidshuchu(sqlist*l)

{

inti=0;

printf("输出表\n");

while(ichangdu)

{

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;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1