数据结构严蔚敏上机代码完整版Word文件下载.docx

上传人:b****6 文档编号:21590466 上传时间:2023-01-31 格式:DOCX 页数:18 大小:76.09KB
下载 相关 举报
数据结构严蔚敏上机代码完整版Word文件下载.docx_第1页
第1页 / 共18页
数据结构严蔚敏上机代码完整版Word文件下载.docx_第2页
第2页 / 共18页
数据结构严蔚敏上机代码完整版Word文件下载.docx_第3页
第3页 / 共18页
数据结构严蔚敏上机代码完整版Word文件下载.docx_第4页
第4页 / 共18页
数据结构严蔚敏上机代码完整版Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构严蔚敏上机代码完整版Word文件下载.docx

《数据结构严蔚敏上机代码完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构严蔚敏上机代码完整版Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构严蔚敏上机代码完整版Word文件下载.docx

〃当前存储空间已满,增加分配

*)realloc(L.elem

(L」istsize

+LISTINCREMENT)*sizeof(ElemType));

 

if(!

newbase)exit(OVERFLOW);

//存储分配失败

L.elem=newbase;

〃新基址

L.listsize+=LISTINCREMENT;

//增加存储容量

}

q=&

(L.elem[i-1]);

〃q为插入位置

for(p=&

(L.clcm[L.lcngth-l]);

p>

=q;

-p)

*(p+l)=*p;

//插入位置及之后的元素右移

*q=e;

〃插入e

++L.length;

〃表长增1

returnOK;

)//ListInsert_Sq

StatusListDclete_Sq(SqList&

L,intLElcmTypc&

c){

〃在顺序线性表L中删除第i个元素,并用c返回其值

//i的合法值为l<

=ListLength_Sq(L)

=L.length)returni;

elsereturn0;

)//LocateEIem_Sq

voidMergeList_Sq(SqListLa.SqListLb,SqList&

Lc){

〃已知顺序线性表La和Lb的元素按值非递减排列

〃归并La和Lb得到新的顺序线性表Lc,Lc的元素也按非递减排列

ElemType*pa,*pb,*pc,*pajast,*pbJast;

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc」ength=La」ength+LK1ength;

pc=Lc.eleni=(ElemType*)inalloc(Lc.listsize*sizeof(ElemType));

Lc.elem)exit(OVERFLOW);

//存储分配失败

paJast=La.elem+La.length-1;

pb_last=Lb.elem+Lb」ength-1;

while(pa<

=pa_last&

&

pb<

=pb」ast)

{

〃归并

if(*pa<

=*pb)

*pc++=*pa++;

else

*pc++=*pb++;

=pa_last)*pc++=*pa++;

〃插入La的剩余元素

while(pb<

=pb_last)*pc++=*pb++:

〃插入Lb的剩余元素

)//MergeList_Sqvoidmain()

SqListL;

〃龙义线性表

InitList_Sq(L)y/调用空表

〃插入数据

ListInsert_Sq(L」,10);

ListInsert_Sq(L,2,20);

ListInsert_Sq(L」,30);

ListInsert_Sq(L,3.40);

printf(H插入后:

\nH);

display(L)7/调用循环函数

ListInsert_Sq(L3J00);

//在L表第三个位置插入100printf(H插入后:

display(L);

ElemTypec;

〃定义e

ListDclete_Sq(L.3,e)y/删除L表的第三个元素,用e表示print”删除后:

printf("

被删除元素:

%d\n\n\n\nH,e);

*/

SqListLa.Lb.Lc:

InitList_Sq(La);

ListInsert_Sq(La丄3);

ListInsert_Sq(La,2,5);

ListInsert_Sq(La,3,8);

ListInsert_Sq(La,4Jl);

printfC'

La插入后:

\nN);

display(La);

InitList_Sq(Lb);

ListInsert_Sq(Lb」,2);

ListInsert_Sq(Lb,2,6);

ListInsert_Sq(Lb3,8);

ListInsert_Sq(Lb,4,9);

ListInsert_Sq(Lb,5J1);

ListInsert_Sq(Lb,6,15);

ListInsert_Sq(Lb,7,20);

printf(HLb插入后:

display(Lb);

MergeList_Sq(La,Lb.Lc);

printfC*归并后:

\n"

);

display(Lc);

printf(H\nH);

inta=LocateElem_Sq(Lc,5);

printf(H%d\n,\a);

第三次上机:

#defineOK1

#dcfineINFEASIBLE-1

#dcfineOVERFLOW-2

typedefintStatus;

typedefintElemTypc:

typedefstmetLNode

ElemTypedata;

structLNode*next;

}LNOdc卢LinkList;

StatusGetElem_L(LinkListL.inti.ElemType&

c)

//L为带头结点的单链表的头指针

〃当第i个元素存在时,其值賦给e并返回OK,否则返回ERRORLinkListp;

p=L->

next:

intj=l;

〃初始化,p指向第一个结点,j为计数器

while(p&

jvi)

〃顺指针向后查找,直到p指向第i个元素或p为空p=p->

++j;

pllj>

i)

returnERROR;

〃第i个元素不存在

e=p->

data;

〃取第i个元素

returnOK:

)//GetEIem_L

StatusListInsert_L(LinkList&

LJnti,ElemTypee)

〃在带头结点的单链线性表L中第i个位宜之前插入元素e

LinkListp,s;

p=L;

intj=0;

jvi・l)

p=p->

next;

}〃寻找第i-1个结点

i-l)returnERROR;

//i小于或者大于表长+1s=(LinkList)nialloc(sizeof(LNode));

〃生成新结点

s->

data=e;

next=p->

〃插入L中

p->

next=s;

}//ListInsert_L

StatusListDeIete_L(LinkList&

L・inti.ElemType&

〃在带头结点的单链线性表L中,删除第i个元素,并由c返回其值

LinkListp.q;

while(p->

next&

j<

i-1)

〃寻找第i个结点,并令p指向其前趋

(p->

next)llj>

i-l)returnERROR;

〃删除位垃不合理

q=p->

next=q->

〃删除并释放结点

e=q->

free(q);

)//ListDelete_L

voidCreateList_L(LinkList&

Ljntn)

〃逆位序输入n个元素的值,建立带表头结点的单链线性表L

LinkListp;

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

L->

next=NULL:

〃先建立一个带头结点的单链表

for(inti=n;

i>

0;

-i)

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

scanf(n%dM,&

data);

〃输入元素值

next=L->

next=p;

〃插入到表头

)//CreateList_L

voiddisplay(LinkListL)

{LinkListp=L->

〃泄义for循环函数while(p)

printf(n%d/\p->

p=p->

Xn11);

voidinain()

LinkListL;

CreateList_L(L.3);

display(L);

ListInsert_L(L,2J00);

ElemTypee;

ListDelete_LXL,2,e);

printfC被删除的值=%d\n”,e);

GetElem_L(U3x);

prin叱获取的值=%d\n,\e);

第四次上机

#include<

include<

#dcfineERROR0

#defineOVERFLOW-2typcdefintSElemType;

typcdefintStatus;

#dcfineSTACKJNIT_SIZE100

#dcfineSTRCKINCREMENT10typcdefstmct{

SElemType*base;

//存储空间初始分配量

〃存储空间分配增量

//在栈构造之前和销毀之后,base的值为NULL

SElemTypc*top:

〃栈顶指针

intstacksize;

JSqStack;

〃当前已分配的存储空间,以元素为单位

StatusInitStack(SqStack&

S){

//构造一个空栈s

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

S.base)exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACKJNIT_SIZE;

}//InitStack

StatusGetTop(SqStackS.SElemType&

〃若栈不空,则用e返回S的栈顶元素,并返回OK;

否则返回ERRORif(S.top==S.base)

e=*(S.top-1);

)//GetTop

StatusPush(SqStack&

S.SElemTypee){

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

if(S.top・S.base>

=S.stacksize){

//栈满,追加存储空间

S.base=(SElemType*)realloc(S.baseJS.stacksize+STRCKINCREMENT)*sizeof(SElemType));

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

S.stacksize+=STRCKINCREMENT:

*S.top++=c:

returnOK;

)//Push

StatusPop(SqStack&

S.SElemType&

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

否则返回ERROR

if(S.top=S.base)returnERROR;

e=*-S.top;

}//Pop

StatusStackEmpty(SqStackS){

if(S.top=S.base)

returnTRUE;

elsereturnERROR:

}voidconversion(){

//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数

SqStackS;

intN;

SElcmTypce;

InitStack(S);

〃构造空栈

scanf(,,%d,\&

N);

while(N){

Push(S,N%8);

N=N/8;

printf(”转换成八进制后的数为:

”);

while(!

StackEmpty(S)){

Pop(S.e);

printf(,,%d,\e);

printf(H\nM);

}//conversionvoidmain()

SElemTypec,x;

Push(S・5);

Push(S・4);

Push(S・3);

Push(S・2);

Push(SJ);

GetTop(Sx);

printfC*栈顶元素为%d\ii'

\e);

printf(H\n,r);

Pop(S.x);

删除的栈顶元素为%d\n"

x);

printf(,,\nH);

输入一个十进制数:

conversion();

第五次上机

/*队列的链式存储钉

#defineFALSE0

typedefintQElemT\pe;

typcdcfintStatus;

typedefstmetQNode{

QElemTypedata;

structQNode*next;

}QNode,*QueuePtr;

typedefstnict{

QueuePtrfront;

〃队头指针

QueuePtrrear;

〃队尾指针

JLinkQueue;

StatusInitQueuc(LinkQueue&

Q){

//构造一个空队列Q

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

Q.front)exit(OVERFLOW);

Q.front->

next=NULL;

StatusDestroyQueue(LinkQucue&

〃销毁队列Q

while(Q.front){

Q.rear=Q.front->

free(Q.front);

Q.front=Q.rear;

StatusEnQueue(LinkQueue&

Q.QElcmTypce){

〃插入元素e为Q的新的队尾元素

QueuePtrp;

p=(QueucPtr)maIloc⑸zcof(QNodc));

p)exit(OVERFLOW);

next=NULL;

Q.rear・>

Q.rear=p:

StatusDeQucue(LinkQueue&

Q.QElemType&

〃若队列不为空,则删除Q的队头元素,用e返回其值,并返回0K:

〃否则返回ERROR

if(Q.front=Q.rear)returnERROR;

p=Q.front->

next=p->

if(Q.rear==p)

Q.rear=Q.front;

free(p);

voiddisp(LinkQueucQ)

p=Q.front->

〃左义for循环函数

while(p)

printf(H%d*\p->

printf(M\nH);

voidmain()

LinkQueueQ;

QElemTypee;

InitQueue(Q);

插入的元素为:

EnQueue(Q,25);

EnQueue(Q.5);

EnQueue(QJ2);

EnQueue(Q,60);

EnQueue(Q33);

disp(Q);

printfC删除队头元素后:

DeQueue(Qx);

DestroyQueue(Q);

if(DestroyQueue(Q)=1)printfC销毁队列成功!

\n"

);

else

printfC销毁队列失败!

附加:

/*队列的顺序存储*/

//最大队列长度

#dcfineMAXQSIZE100

typcdefstmct{QElemType*baseintfront;

intrear;

JSqQueue;

//初始化的动态分配存储空间

〃头指针,若队列不空,指向队列头元素

〃尾指针,若队列不空,指向队列尾元素的下一个位置

StatusInitQueue(SqQueue&

〃构造一个空队列

Q.base=(QElcmTypc*)malloc(MAXQSIZE*sizeof(QElcmType));

Q.base)exit(OVERFLOW);

Q.front=Q.rear=0;

intQueueLenth(SqQueueQ){

〃返回Q的元素个数,即队列的长度

return(Q.rear・Q.from+MAXQSIZE)%MAXQSIZE:

StatusEnQueue(SqQueue&

Q.QElemTypee){

if((Q.rear+1)%MAXQSIZE==Q.front)returnERROR;

〃队列满Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

StatusDeQueue(SqQueue&

〃若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK:

if(Q.front=Q.rear)returnERROR;

e=Q.base[Q.front];

Q.front=(Q.front+l)%MAXQSIZE:

第六次上机

#defineTRUE1

typedefcharTElemType;

//二叉树的二叉链表存储表示

typedefstmetBiTNode{

TEIemT\-pedata;

structBiTNode*lchild?

rchild;

//左右孩子指针

}BiTNode,*BiTree;

StatusCrcatcBiTree(BiTree&

T){

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,

〃构造二叉树链表表示的二叉树T

charch;

scai】f(”%c:

ch);

if(ch=**)

T=NULL;

else{

(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);

T->

data=ch;

〃生成根结点

CreateBiTree(T->

lchild);

〃构造左子树

rchild);

〃构造右子树

)//CreateBiTrec

voidPreOrderTraverse(BiTreeT){

〃先序遍历

printf(H%cgdata);

〃输出结点

PreOrderTraverse(T->

lchild);

rchild);

voidInOrderTraverse(BiTreeT){

〃中序遍历

print

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

当前位置:首页 > 解决方案 > 学习计划

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

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