线性表的基本操作.docx

上传人:b****3 文档编号:1937139 上传时间:2022-10-25 格式:DOCX 页数:23 大小:20.27KB
下载 相关 举报
线性表的基本操作.docx_第1页
第1页 / 共23页
线性表的基本操作.docx_第2页
第2页 / 共23页
线性表的基本操作.docx_第3页
第3页 / 共23页
线性表的基本操作.docx_第4页
第4页 / 共23页
线性表的基本操作.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

线性表的基本操作.docx

《线性表的基本操作.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作.docx(23页珍藏版)》请在冰豆网上搜索。

线性表的基本操作.docx

线性表的基本操作

实验二线性表的基本操作

一、实验目的

1.掌握用C++/C语言调试程序的基本方法。

2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。

二、实验要求

1.C++/C完成算法设计和程序设计并上机调试通过。

2.撰写实验报告,提供实验结果和数据。

3. 分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。

三、实验内容:

1.分析并运行以下各子程序的主要功能。

 程序1:

顺序存储的线性表和运算

#include

#defineMAXSIZE100

intlist[MAXSIZE];

intn;

/*insertinaseqlist*/

intsq_insert(intlist[],int*p_n,inti,intx)

{intj;

if(i<0||i>*p_n)return

(1);

if(*p_n==MAXSIZE)return

(2);

for(j=*p_n+1;j>i;j--)

list[j]=list[j-1];

list[i]=x;

(*p_n)++;

return(0);

}

/*deleteinaseqlist*/

intsq_delete(intlist[],int*p_n,inti)

{intj;

if(i<0||i>=*p_n)return

(1);

for(j=i+1;j<=*p_n;j++)

list[j-1]=list[j];

(*p_n)--;

return(0);

}

 

voidmain()

{inti,x,temp;

printf("pleaseinputthenumberforn\n");

printf("n=");

scanf("%d",&n);

for(i=0;i<=n;i++)

{printf("list[%d]=",i);

scanf("%d",&list[i]);}

 

printf("Thelistbeforeinsertionis\n");

for(i=0;i<=n;i++)printf("%d",list[i]);

printf("\n");

printf("pleaseinputthepositionwhereyouwanttoinsertavalue\nposition=");

scanf("%d",&i);

printf("pleaseinputthevalueyouwanttoinsert.\nx=");

scanf("%d",&x);

temp=sq_insert(list,&n,i,x);

switch(temp)

{case0:

printf("Theinsertionissuccessful!

\n");

printf("Thelistisafterinsertionis\n");

for(i=0;i<=n;i++)printf("%d",list[i]);

printf("\n");

printf("%d\n",n);

break;

case1:

case2:

printf("Theinsertionisnotsuccessful!

\n");break;}

/*deleting*/

printf("Thelistbeforedeletingis\n");

for(i=0;i<=n;i++)printf("%d",list[i]);

printf("\n");

printf("pleaseinputthepositionwhereyouwanttodeleteavalue\nposition=");

scanf("%d",&i);

temp=sq_delete(list,&n,i);

switch(temp)

{case0:

printf("Thedeletingissuccessful!

\n");

printf("Thelistisafterdeletingis\n");

for(i=0;i<=n;i++)printf("%d",list[i]);

printf("\n");

printf("%d",n);

break;

case1:

printf("Thedeletingisnotsuccessful!

");break;}

}

2.分析并运行以下各子程序的主要功能。

程序2链式存储的线性表和运算

#include

#include

structnode{

chardata;

structnode*next;

};

typedefstructnodeNODE;

/*Thisfunctioncreatesalink_listwithNnodes.*/

NODE*create_link_list(intn)

{inti;

NODE*head,*p,*q;

if(n==0)returnNULL;

head=(NODE*)malloc(sizeof(NODE));

p=head;

printf("Pleaseinput%dcharsforthelinklist\n",n);

for(i=0;i

{scanf("%c",&(p->data));

q=(NODE*)malloc(sizeof(NODE));

printf("test3\n");

p->next=q;

p=q;}

scanf("%c",&(p->data));

getchar();

p->next=NULL;

return(head);}

/*Thisfunctioninsertsanodewhosevalueisb*/

/*beforethenodewhosevalueisa,ifthenodeisnotexist,*/

/*theninsertitattheendofthelist*/

voidinsert(NODE**p_head,chara,charb)

{NODE*p,*q;

q=(NODE*)malloc(sizeof(NODE));

q->data=b;

q->next=NULL;

if(*p_head==NULL)*p_head=q;

else

{p=(NODE*)malloc(sizeof(NODE));

p=*p_head;

while(p->data!

=a&&p->next!

=NULL)

p=p->next;

q->next=p->next;

p->next=q;}

}

/*Thefunctiondeletesthenodewhosevalueisa,*/

/*ifsuccess,return0,orreturn1*/

intdeletenode(NODE**p_head,chara)

{NODE*p,*q;

q=*p_head;

if(q==NULL)return

(1);

if(q->data==a)

{*p_head=q->next;

free(q);

return(0);}

else

{while(q->data!

=a&&q->next!

=NULL)

{p=q;

q=q->next;}

if(q->data==a)

{p->next=q->next;

free(q);

return(0);}

elsereturn

(1);}

}

voidmain()

{NODE*my_head,*p;

/*createalinklistwithmnodes*/

intm;

charch_a,ch_b;

printf("pleaseinputthenumberofnodesforthelink_list\nm=");

scanf("%d",&m);

getchar();

printf("test1\n");

my_head=(NODE*)malloc(sizeof(NODE));

my_head=create_link_list(m);

/*Outputthelinklist*/

printf("Thelinklistislike:

\n");

p=my_head;

while(p!

=NULL)

{printf("%c",p->data);

p=p->next;

}

printf("\n");

/*insertanodewhosevalueisbbeforea*/

printf("Pleaseinputthepositionfora\nch_a=");

getchar();

scanf("%c",&ch_a);

getchar();

printf("Pleaseinputthevaluethatyouwanttoinsert\nch_b=");

scanf("%c",&ch_b);

getchar();

insert(&my_head,ch_a,ch_b);

printf("Thelinklistafterinsertionislike:

\n");

p=my_head;

while(p!

=NULL)

{printf("%c",p->data);

p=p->next;

}

printf("\n");

/*deleteanodewhosevalueisa*/

printf("Pleaseinputthepositionforaa=");

scanf("%c",&ch_a);

getchar();

deletenode(&my_head,ch_a);

printf("Thelinklistafterdeletingislike:

\n");

p=my_head;

while(p!

=NULL)

{printf("%c",p->data);

p=p->next;

}

printf("\n");

}

3.运行以下程序并分析各子函数的主要功能。

#include

#include

structtagNode

{

intdata;

structtagNode*pNext;

};

typedefstructtagNode*pNode;

//将结点插入到链表的适当位置,这是一个降序排列的链表

//

voidinsertList(pNodehead,//链表头结

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

当前位置:首页 > 成人教育 > 专升本

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

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