线性表的基本操作Word文件下载.docx

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

线性表的基本操作Word文件下载.docx

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

线性表的基本操作Word文件下载.docx

L=(LinkList)malloc(sizeof(LNode));

if(!

L)returnOVERFLOW;

L->

next=NULL;

q=L;

printf("

输入元素个数和各元素:

"

);

scanf("

%d"

&

n);

for(i=0;

i<

n;

i++){

p=(LinkList)malloc(sizeof(LNode));

scanf("

p->

data);

q->

next=p;

q=p;

}

q->

returnOK;

}

StatusGetElem(LinkListL,inti,ElemType&

e){

LinkListp;

intj;

p=L->

next;

j=1;

while(p&

&

j<

i){

p=p->

++j;

}

if(!

p||j>

i)returnERROR;

e=p->

data;

returnOK;

StatusListInsert(LinkList&

L,inti,ElemTypee){

LinkListp,s;

printf("

输入插入数的位置和值:

scanf("

%d%d"

i,&

e);

p=L;

j=0;

i-1){

s=(LinkList)malloc(sizeof(LNode));

s->

data=e;

next=p->

p->

next=s;

StatusListDelete(LinkList&

L,inti,ElemType&

LinkListp,q;

输入要删除元素的位置:

i);

while(p->

next&

i-1){

(p->

next)||j>

i-1)returnERROR;

q=p->

next=q->

e=q->

free(q);

StatusClearList(LinkList&

L){

while(L->

next){

该表已被清空!

StatusLNodeEmpty(LinkListL){

if(L->

next==NULL)returntrue;

elsereturnfalse;

StatusCreateList(LinkList&

L,intn){

inti;

L=(LinkList)malloc(sizeof(LNode));

L->

next=NULL;

输入元素的个数和相应值:

for(i=n;

i>

0;

--i){

p=(LinkList)malloc(sizeof(LNode));

scanf("

p->

next=L->

next=p;

StatusListDisp(LinkListL){

LinkListp;

p=L->

while(p!

=NULL){

%d"

p->

p=p->

}

\n"

}StatusListLength(LinkListL){

inti=0;

i++;

returni;

intmain(){

LinkListL;

ElemTypee;

inti,choose;

InitLNode(L);

if(LNodeEmpty(L))printf("

表为空."

else

do

{printf("

选择操作:

\n1:

输出某个元素的值;

\n2:

在某个元素之前插入一个数;

\n3:

删除某个元素;

\n4:

显示链表中的元素及其长度\n"

choose);

switch(choose){

case1:

要查找元素的位置"

GetElem(L,i,e);

第%d个元素的值是%d\n"

i,e);

break;

case2:

ListInsert(L,i,e);

printf("

当前链表中的所有元素为:

ListDisp(L);

break;

case3:

ListInsert(L,i,e);

被删除元素的值是%d\n"

e);

ListDisp(L);

case4:

链表中的所有元素为:

链表的长度为:

%d\n"

ListLength(L));

default:

操作结束!

exit(0);

}while

(1);

ClearList(L);

return;

顺序表

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}SqList;

StatusInitList(SqList&

L){

inti,n;

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

L.elem)return(OVERFLOW);

printf("

输入元素个数和各元素的值:

for(i=0;

L.elem[i]);

L.length=n;

L.listsize=LIST_INIT_SIZE;

voidTraverList(SqListL){

inti;

\nTheSqListL:

L.length;

i++)

%d\t"

L.elem[i]);

StatusListInsert(SqList&

L,inti,ElemTypee){

ElemType*newbase;

ElemType*p,*q;

if(i<

1||i>

L.length+1)returnERROR;

if(L.length>

=L.listsize){

newbase=(ElemType*)realloc(L.elem,

(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!

newbase)exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

q=&

(L.elem[i-1]);

for(p=&

(L.elem[L.length-1]);

p>

=q;

--p)

*(p+1)=*p;

*q=e;

++L.length;

StatusListDelete(SqList&

L,inti,ElemType&

e){

if((i<

1)||(i>

L.length))returnERROR;

p=&

e=*p;

q=L.elem+L.length-1;

for(++p;

p<

++p)*(p-1)=*p;

--L.length;

intLocateElem(SqListL,ElemTypee){

ElemType*p;

i=1;

p=L.elem;

while(i<

=L.length&

(*p++!

=e))

++i;

=L.length)returni;

elsereturn0;

voidmain(){

SqListL;

if(InitList(L)==OVERFLOW){printf("

\nOVERFLOW"

return;

TraverList(L);

do{

选择要执行的基本操作:

插入元素;

删除元素;

查找元素;

输入要插入元素的位置和值:

if(ListInsert(L,i,e)==OK)TraverList(L);

elseprintf("

不能插入!

if(ListDelete(L,i,e)==OK)TraverList(L);

删除位置不合法。

case3:

输入要查找元素的值:

if(LocateElem(L,e))

该元素的位置是第%d位!

LocateElem(L,e));

该元素不存在!

return;

【实验心得】

通过这次实验课程使我明白了课本的重要性,当我遇到不懂或不确定的知识的时候就会求助于课本,所谓“万变不离其宗”。

只要掌握了最根本的知识,其他在其基础之上的问题就会变得很容易了。

另外我明白了合作的重要性,当遇到困难时,朋友的帮忙会显得尤其重要,一筹莫展时,伙伴的一句话也许就能点醒你。

众人拾柴火焰高,就是这个道理。

很难得实验课,让我有很多的感悟!

实验二:

栈的表示及栈的应用

(1)掌握栈的顺序存储结构及其基本操作的实现。

(2)掌握栈后进先出的特点,并利用其特性在解决实际问题中的应用。

(3)掌握用递归算法来解决一些问题。

1.编写程序,对于输入的任意一个非负十进制整数,输出与其等值的八进制数(课本P48)。

2.

编写递归程序,实现以下函数的求解(课本P54)。

 

3.编写程序,实现Hanoi塔问题(课本P55-P58)。

【主要代码】进制转换

typedefintSElemType;

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

StatusInitStack(SqStack&

S){//构造一个空栈

S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

S.base)exit(OVERFLOW);

//存储分配失败

S.top=

S.base;

S.stacksize=STACK_INIT_SIZE;

}//InitStack

StatusPush(SqStack&

S,SElemTypee){

//插入元素e为新的栈顶元素

if(S.top-S.base>

=S.stacksize)

{//栈满,追加存储空间

S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

S.base)exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

*S.top++=e;

}//PUSH

StatusPop(SqStack&

S,SElemType&

e)

{

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;

否则返回ERROR

if(S.top==S.base)

returnERROR;

e=*--S.top;

}//Pop

StatusStackEmpty(SqStackS)

//若栈不空,返回ERROR,否则返回OK

if(S.top==S.base)

}//StackEmpty

intN,e,M;

SqStackS;

InitStack(S);

请入一个数字:

M);

需要转换为几进制:

while(N)

{

Push(S,N%M);

N=N/M;

printf("

其对应的%d进制数是"

M);

while(!

StackEmpty(S)){

Pop(S,e);

递归程序

#include<

longFibonacci(intn);

voidmain()

intn;

longL;

请输入n的值:

L=Fibonacci(n);

Fibonacci(%d)=%ld\n"

n,L);

longFibonacci(intn)

longt=1;

if(n==1||n==0)

t=t*n;

if(n>

1)

t=Fibonacci(n-1)+Fibonacci(n-2);

returnt;

汉诺塔

voidmove(chara,intn,charb)

将编号为%d的盘从移到%c上\n"

n,a,b);

voidhanoi(intn,charx,chary,charz){

if(n==1)

move(x,1,z);

hanoi(n-1,x,z,y);

move(x,n,z);

hanoi(n-1,y,x,z);

请输入n的值:

"

hanoi(n,'

a'

'

b'

c'

通过这次实验课程的学习使我对书本上的知识有了更深的了解,更加明白了深层次含义。

也明白了书本的重要性以及对基础知识的掌握的重要性的深刻认识。

以后的学习生活中我一定汲取这次得到的教训。

实事求是,全力以赴。

实验三:

串的模式匹配算法和

二叉树的建立及遍历

(1)掌握串的顺序存储表示及模式匹配算法(简单匹配和KMP算法)的实现。

(2)掌握利用先序序列建立二叉树的二叉链表的过程。

(3)掌握二叉树的先序、中序和后序遍历算法。

1.编写程序,对于输入的任意两个串:

主串和子串,判断子串在主串中的位置。

如:

主串为ababcab,子串为abc,找输出其位置为3;

若子串为abd,则提示子串在主串中不存在。

2.编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。

输入先序序列abc###de###,则建立如下图所示的二叉树。

并显示其先序序列为:

abcde

中序序列为:

cbaed

后序序列为:

cbeda

【程序代码】

实验1

#include"

stdio.h"

#defineMAXSTRLEN255

typedefunsignedcharSString[MAXSTRLEN+1];

//第一个用来存储字符个数

intstrlength(SStrings)//求字符串的长度

i=0;

while(s[i]!

='

\0'

i++;

intIndex(SStringS,SStringT,intpos)

{

inti,j;

i=pos,j=1;

while(i<

=S[0]&

j<

=T[0])

{

if(S[i]==T[j])

j++;

else

i=i-j+2;

//i不变,j后退

j=1;

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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