线性表的基本操作讲解Word格式文档下载.docx

上传人:b****6 文档编号:18824640 上传时间:2023-01-01 格式:DOCX 页数:21 大小:20.79KB
下载 相关 举报
线性表的基本操作讲解Word格式文档下载.docx_第1页
第1页 / 共21页
线性表的基本操作讲解Word格式文档下载.docx_第2页
第2页 / 共21页
线性表的基本操作讲解Word格式文档下载.docx_第3页
第3页 / 共21页
线性表的基本操作讲解Word格式文档下载.docx_第4页
第4页 / 共21页
线性表的基本操作讲解Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

线性表的基本操作讲解Word格式文档下载.docx

《线性表的基本操作讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作讲解Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

线性表的基本操作讲解Word格式文档下载.docx

scanf(,z%d,\&

n);

for(i二0;

i<

=n;

i++)

{printf("

list[%d]二"

,i);

scanf(”%d"

&

list[i]);

printf(z,Thelistbeforeinsertionis\n"

i++)printf(z,%dz,,list[i]);

\n"

printf("

pleaseinputthepositionwhereyouwanttoinsertavalue\nposition=〃);

scanf(,z%d,z,&

i);

pleaseinputthevalueyouwanttoinsert・\nx=z,);

scanf(,z%d,z,&

x);

temp=sq_insert(list,&

n,i,x);

switch(twmp)

{case0:

printfC'

Theinsertionissuccessful!

\n"

Thelistisafterinsertionis\n"

for(i=0;

i++)printf("

%d"

Jist[i]);

printf(“%d\n"

n);

break;

case1:

case2:

Theinsertionisnotsuccessful!

\n,z);

/*deleting*/

Thelistbeforedeletingis\n"

pleaseinputthepositionwhereyouwanttodeleteavalue\nposition=〃);

temp=sq_delete(list,&

n,i);

printfC'

Thedeletingissuccessful!

\nz/);

Thelistisafterdeletingis\n"

printf(“%d"

Thedeletingisnotsuccessful!

,z);

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

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

#include〈malloc・h>

struetnode{

chardata;

structnode*next;

};

typedefstructnodeNODE;

/♦Thisfunctioncreatesalink.listwithNnodes.♦/

NODE*create_link_list(intn)

{inti;

NODE*head,*p,*q;

i.f(n==0)returnNULL;

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

p=head;

Pleaseinput%dcharsforthelinklist\n"

n;

{scanf(,z%c"

、&

(p~>

data));

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

test3\n"

p~>

next二q;

P二q;

scanf(,z%c"

(p->

getchar0;

p->

next二NULL;

:

return(head);

/♦Thisfunctioninsertsanodewhosevalueisb*/

/♦beforethenodewhosevalueisa,ifthenodeisnotexist,*//♦theninsertiterttheendofthelist*/

voidinsert(NODE**p_head,chara,charb)

{NODE*p,*q;

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

q~>

data=b;

next二NULL;

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

else

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

p=*p_head:

while(p~>

data!

=a&

&

p->

next!

=NULL)

p=p"

>

next;

next=p->

next二q;

/♦Thefunctiondeletesthenodewhosevalueisa,♦/

/*ifsuccess,return0,orreturn1*/

intdeletenode(N0DE**p_head,chara)

q=*p_head;

if(q==NULL)return

(1);

if(q"

data==a)

{*p_head=q~>

free(q);

return(0);

{whi.le(q~>

q~>

{p=q;

q=q"

if(q->

{p->

next二q->

elsereturn(l);

{NODE*my_head,*p:

/*createalinklistwithmnodes*/

intm;

charch_a,ch_b;

pleaseinputthenumberofnodesforthelink_list\nm二"

);

scanf;

printf(/ztestl\n"

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

my_head=create_link_list(m);

/♦Outputthelinklist♦/

printf(〃Thelinklistislike:

\nz,);

p=my_head;

while(p!

$c"

、p~>

data);

p=p~>

/♦insertanodewhosevalueisbbeforea*/

Pleaseinputthepositionfora\nch_a="

scanf(,z%c,z,&

ch_a);

Pleaseinputthevaluethatyouwanttoinsert\nch_b="

scanf(,z%c,z,&

ch_b);

insert(&

my_head,ch_a,ch_b);

printf(〃Thelinklistafterinsertionislike:

\nz,);

p=my_head;

、p*>

/♦deleteanodewhosevalueisa*/

Pleaseinputthepositionforaa="

deletenode(&

my_head,ch_a);

printf(〃Thelinklistafterdeletingislike:

\n,z);

printf(〃\n"

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

^include<

stdio.h>

stdlib.h>

stmcttagNode

{

intdata;

stmcttagNode*pNext;

tvpedefstmcttagNode*pNode;

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

voiduisertList(pNodehead,//链表头结点

pNodepnode)//要插入的结点

pNodepPri=head;

while(pPri->

pNext!

=NULL)

if(pPri->

pNext->

data<

pnode->

data)

pNext=pPri->

pNext;

pPri->

pNext=pnode;

pPri=pPri->

pNext==NULL)//如果要插入的结点最小

pPri->

〃输出链表

voidprmtLuikedList(pNodehead)

pNodetenip=head->

while(temp?

=NULL)

prmtf(n%dM,temp->

temp=temp->

〃从链表中删除结点

voiddelfoiniList(pNodehead,mtdata)

while(temp!

if(temp->

data==data)

pNext=temp->

fiee(temp);

pPri=temp;

temp=temp・>

pNodehead=(pNode)malloc(sizeof(stnicttagNode));

//给头指l|•分配空间pNodepTemp=NULL;

inttemp;

head->

pNext=NULL;

//比较好的习惯就是分配好空间,马上赋值

prmtf("

请输入要放入链表中的数据,以-1结尾:

”);

〃读入数据,以-1结尾,把数据插入链表中scanf(H%cl,\&

temp);

=-l)

pTemp=(pNode)nialloc(sizeof(sti-ucttagNode));

pTemp

pTemp->

msertList(head,pTemp);

scanf(”%cT:

2mp);

pnntf(”降序排列的链表为:

\n“);

printLiiikedList(head);

〃下面的代码当删除函数编写成功后,可以取消注释,让其执行,主要是调用函数实现链表结点的删除

〃pnntf(”请输入要删除数,以-1结尾:

//scanf(n%d,\&

//wlule(temp!

〃{

delfbrniList(head.temp);

//scaiif(M%d,\&

〃}

〃pnntf(”删除节点后,链表中剩余数据为:

”);

//printLuikedList(head);

//pnntW);

!

1!

、思考与提高

试将以上链表改为有序表,并分析有序表有哪些显著的优点和缺点?

库函数载和常量定义:

(代码,C++)

#iiiclude<

iostieam>

usingnamespacestd;

constmtMaxSize=100;

(1)顺序表存储结构的定义(类的产明上、代码)template<

classdatatype>

〃定义模板类SeqList

classSeqList

public:

SeqList();

〃无参构造函数

SeqList(datatypea[],iiitn);

〃有参构造函数

-SeqListQ{};

〃析构函数为空

mtLengthQ;

〃求线性表的长度

datatypeGet(mt1);

〃按位查找,取线性表的第i个元素

iiitLocate(datatypeitem);

〃查找元素item

voidIiiseit(mti,datatypeitem);

〃在第i个位置插入元素itemdatatypeDelete(mti);

//删除线性表的第i个元素

voiddisplayO;

//遍历线性表,按序号依次输岀各元素private:

datatypedata[MaxSize];

〃存放数据元素的数组

mtlengtli;

〃线性表的长度

};

(2)初始化顺序表算法实现(不带参数的构造函数)严

*输入:

*前置条件:

顺序表不存在

*功能:

构建一个顺序表

*输出:

*后置条件:

表长为0

*/

实现代码:

template<

SeqList<

datatype>

SeqList()

length=0;

(3)顺序表的建立算法(带参数的构造函数)严

顺序表信息的数组形式a[],顺序表长度n

将数组a[]中元素建为长度为n的顺序表

SeqList(datatvpea[],mtn)

if(n>

MaxSize)

cout«

-数组元素个数不合法-«

endl;

for(mti=0;

data[i]=a[i];

length=n;

}(4)在顺序表的第i个位置前插入元素e算法严

插入元素e,插入位置1

顺序表存在,I要合法

将元素e插入到顺序表中位置1处

顺序表插入新元素,表长加1

voidSeqList<

:

Iiisen(inti,datatypeitem)

mtj;

if(length>

=MaxSize)

M溢出H«

l|i>

length+l)

Mi不合法!

”<

<

for(j=length;

j>

=i;

j-)

data[j]=data[j-l];

data[i-l]=item;

length++;

}(5)删除线性表中第i个元素算法

要删除元素位置1

顺序表存在」要合法

删除顺序表中位置为1的元素

顺序表册除了一个元素,表长减1

datatypeSeqList<

datatvpe>

Delete(inti)

intitemj;

if(length=0)cout«

M表为空,无法删除元素!

length)

{cout«

Mi不合法!

}item=data[i-1];

//获得要删除的兀素值for(j=i;

length;

j++)data[j-l]=data[j];

〃注意数组下标从0记

length--;

returnitem;

}(6)遍历线性表元素算法

顺序表存在

顺序表遍历

输出所有元素

template<

classdatatvpe>

voidSeqList<

displayQ

if(length==O)

M表为空,无法输出!

}fbr(inti=O;

i<

i-H-)

data[i]«

M”;

(7)获得线性表长度算法

输出顺序表长度

出:

顺序轰长度

mtSeqList<

LengtliQ

returnLength;

(8)在顺序线性表中查找e值,返回该元素的位序算法/*

查询元素值e

按值查找值的元素并输出位置

查询元素的位置

mtSeqList<

Locate(datatypeitem)

i++)if(data[i]==item)returni+1;

〃下标为i的元素等于item,返回其序号讦1return0;

〃查找失败

(9)获得顺序线性表第1个元素的值严

查询元素位置1

按位查找位置为1的元素并输出值

查询元素的值

Get(iiiti)

{’

0||i>

lengtli)

elsereturndata[i-l];

(10)判表空算法

判表是否为空

为空返回1,不为空返回0

boolSeqList<

EmptyQ

if(length=0)

return1;

return0;

(11)求直接前驱结点算法

要查找的元素"

待存放前驱结点值7

*功八能;

查找该元素的所在位置,获得其前驱所在位置。

返回其前驱结点的位序。

7值为前驱结点的值

Pre(datatvpeitem)

intk=Locate(item)-l;

if(k>

0)

returnk;

M无前驱结点!

y<

eiidl;

return0;

(12)求直接后继结点算法

待存放后继结点值7

查找该元素的所在位置,获得其后继所在位置。

水输出:

返回其后继结点的位序。

7值为后继结点的值

Suc(datatypeitem)

intk=Locate(item)+l;

if(k>

M无后继结点!

上机实现以上基本操作,写出main()程序:

用以上基本操作算法,实现A二AUB算法。

(利用函数模板实现)严

集合A,集合E

实现A=AUB

A中添加了E中的元素。

实现代码:

SeqList<

Add(SeqList<

item)

if(item.EmptyO)

return*tliis;

mtk=item.Length();

mtnum=this->

Lengtli();

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

当前位置:首页 > 人文社科 > 哲学历史

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

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