数据结构代码Word文档下载推荐.docx

上传人:b****1 文档编号:1081547 上传时间:2023-04-30 格式:DOCX 页数:22 大小:20.09KB
下载 相关 举报
数据结构代码Word文档下载推荐.docx_第1页
第1页 / 共22页
数据结构代码Word文档下载推荐.docx_第2页
第2页 / 共22页
数据结构代码Word文档下载推荐.docx_第3页
第3页 / 共22页
数据结构代码Word文档下载推荐.docx_第4页
第4页 / 共22页
数据结构代码Word文档下载推荐.docx_第5页
第5页 / 共22页
数据结构代码Word文档下载推荐.docx_第6页
第6页 / 共22页
数据结构代码Word文档下载推荐.docx_第7页
第7页 / 共22页
数据结构代码Word文档下载推荐.docx_第8页
第8页 / 共22页
数据结构代码Word文档下载推荐.docx_第9页
第9页 / 共22页
数据结构代码Word文档下载推荐.docx_第10页
第10页 / 共22页
数据结构代码Word文档下载推荐.docx_第11页
第11页 / 共22页
数据结构代码Word文档下载推荐.docx_第12页
第12页 / 共22页
数据结构代码Word文档下载推荐.docx_第13页
第13页 / 共22页
数据结构代码Word文档下载推荐.docx_第14页
第14页 / 共22页
数据结构代码Word文档下载推荐.docx_第15页
第15页 / 共22页
数据结构代码Word文档下载推荐.docx_第16页
第16页 / 共22页
数据结构代码Word文档下载推荐.docx_第17页
第17页 / 共22页
数据结构代码Word文档下载推荐.docx_第18页
第18页 / 共22页
数据结构代码Word文档下载推荐.docx_第19页
第19页 / 共22页
数据结构代码Word文档下载推荐.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构代码Word文档下载推荐.docx

《数据结构代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构代码Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。

数据结构代码Word文档下载推荐.docx

intlistsize;

}SqList;

P23,线性表顺序存储结构上的基本运算

初始化操作

StatusIniList_Sq(SqList&

L){

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

L.elem)exit(OVERFLOW);

L.length=0;

L.listsize=LIST_INIT_SIZE;

returnOK;

P24,在顺序表里插入一个元素

StatusListInsert_sq(SqList&

L,inti,ElemTypee){

if(i<

1||i>

=L.length+1)returnERROR;

if(L.length>

=L.listsize){

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

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

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;

returnOK;

P24,在顺序表里删除一个元素

StatusListDelete_Sq(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;

P25,在顺序表里查找一个元素

intLocatElem_Sq(SqListL,ElemTypee,

Status(*compare)(ElemType,ElemType)){

i=1;

p=L.elem;

while(i<

=L.length&

!

(*compare)(*p++,e))

++i;

if(i<

=L.length)returni;

elsereturn0;

P26,顺序表的合并

voidMergeList_Sq(SqListLa,SqListLb,SqList&

Lc){

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;

pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemTpe));

if(!

Lc.elem)exit(OVERFLOW);

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

pb_last=Lb.elem+Lb.length-1;

while(pa<

=pa_last&

pb<

=pb_last){

if(*pa<

=*pb)*pc++=*pa++;

else*pc++=*pb++;

while(pa<

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

while(pb<

=pb_last)*pc++=*pb++;

P28,线性表的单链表存储结构

Typedef 

struct 

LNode 

{

 

ElemType 

data;

struct 

*next;

}LNode 

*LinkList;

/*LinkList为结构指针类型*/

P29,查找元素

Status 

GetElem_L(LinkList 

L,int 

i,ElemType&

p=L->

next;

j=1;

while 

(p&

j<

i){

p=p->

++j;

if 

(!

p||j>

i)return 

ERROR;

e=p->

return 

ok;

P29,在单链表中插入一个元素

ListInsert_L(LinkList 

L, 

int 

i,ElmeType 

){

p=L;

j=0;

while(p&

i-1){

p=p->

++j;

if(!

i-1) 

return 

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

s->

data=e;

s->

next=p->

p->

next=s;

OK;

P30,在单链表中删除一个元素

ListDelete_L(LinkList 

i, 

Elemtype 

(p->

next&

i-1){

++j;

(p->

next)||j>

ERROR 

;

q=p->

p->

next=q->

e=q->

free(q);

P30,建立单链表

void 

CreateList_L(LinkList 

n){

L=(Linklist)malloc(sizeof(Lnode));

L->

next=NULL;

for(i=n;

i>

0;

--i){

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

scanf(&

p->

data);

next=L->

L->

next=p;

P31,合并单链表

mergelist_L(LinkList 

La,LinkList&

Lb,LinkList 

pa=La->

pb=Lb->

Lc=pc=La;

while(pa&

pb) 

if(pa->

data<

=pb->

data){ 

pc->

next=pa;

pc=pa;

pa=pa->

}

else{

pc->

next=pb;

pc=pb;

pb=pb->

pc->

next=pa?

pa:

pb;

free(Lb);

P31,线性表的静态单链表存储结构

#define 

MAXSIZE 

1000

typedef 

int 

cur;

}component,SlinkList[MAXSIZE];

P32,定位函数

LocateElem_SL(SlinkList 

s,ElemType 

i=s[0].cur;

while(i&

s[i].data!

=e) 

i=s[i].cur;

i;

P33,

IniteSpace_SL(SlinkList 

space){

for(i=0;

i<

MAXSIZE-1;

++i)space[i].cur=i+1;

space[MAXSIZE-1].cur=0;

Malloc_SL(SlinkList 

i=space[0].cur;

(space[0].cur)

space[0].cur=space[i].cur;

returni;

P35,线性表的双链表存储结构

DulNode{ 

DulNode 

*prior, 

}DulNode,*DuLinklist;

P46,栈的顺序存储

#defineTRUE1

#defineFALSE0

typedefstruct{

SElemType*base;

SElemType*top;

intstacksize;

//栈可使用的最大容量

}SqStack;

P47,栈的初始化

StatusInitStack(SqStack&

S){

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

if(!

S.base)exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

取栈顶元素

StatusGetTop(SqStackS,SElemType&

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

e=*(S.top-1);

入栈

StatusPush(SqStack&

S,SElemTypee){

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;

出栈

StatusPop(SqStack&

S,SelemType&

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

e=*--S.top;

P48,转换为8进制

voidconversion()

InitStack(S);

scanf(“%d”,&

N);

while(N)

{

Push(s,N%8);

N=N/8;

while(!

StackEmpty(s)){

Pop(S,e);

printf(“%d”,e);

P55,移动圆盘

voidhanoi(intn,charx,chary,charz)/*将塔座X上按直径由小到大且至上而下编号为1至n的n个圆盘按规则搬到塔座Z上,Y可用作辅助塔座*/

{

if(n==1)

move(x,1,z);

/*将编号为1的圆盘从X移动Z*/

else{

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

/*将X上编号为1至n-1的圆盘移到Y,Z作辅助塔*/

move(x,n,z);

/*将编号为n的圆盘从X移到Z*/

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

/*将Y上编号为1至n-1的圆盘移动到Z,X作辅助塔*/

}

}

P61,链式队列的定义

typedefstructQNode{

QElemTypedata;

structQNode*next;

}QNode,*QueuePtr;

typedefstruct{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

P62,初始化

StatusInitQueue(LinkQueue&

Q)

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

Q.front)exit(OVERFLOW);

Q.front->

next=NULL;

销毁队列

StatusDestroyQueue(LinkQueue&

while(Q.front){

Q.rear=Q.front->

free(Q.front);

Q.front=Q.rear;

入队操作

StatusEnQueue(LinkQueue&

Q,QelemTypee)

p=(QueuePtr)malloc(sizeof(QNode));

p)exit(OVERFLOW);

data=e;

Q.rear->

next=p;

Q.rear=p;

出队操作

StatusDeQueue(LinkQueue&

Q,QelemType&

e)

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

p=Q.front->

Q.front->

next=p->

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

free(p);

P64,循环对列定义

#defineMAXQSIZE100/*队列的最大长度*/

QElemType*base;

/*队列的元素空间*/

intfront;

/*头指针指示器*

intrear;

/*尾指针指示器*/

}SqQueue;

初始化操作

StatusInitQueue(SqQueue&

Q){

Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

if(!

Q.base)exit(OVERFLOW);

Q.front=Q.rear=0;

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,QElemType&

e){

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

e=Q.base[Q.front];

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

求队列长度

intQueueLength(SqQueueQ)

return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

P93//------数组的顺序存储表示―――――

#include<

string.h>

#defineMAX_ARRAY_DIM8

ELemType*base;

//数组元素基址

intdim;

//数组维数

int*bounds;

//数组维数基址

int*constants;

//数组映像函数常量基址

}Array;

P98,三元数组顺序表存储

#defineMAXSIZE12500

inti,j;

ElemTypee;

}Triple;

typedefunion{

Tripledata[MAXSIZE+1];

intmu,nu,tu;

}TSMatrix;

P99,矩阵转置

StatusTransposeSMatrix(TSMatrixM,TSMatrix&

T){

T.mu=M.nu;

T.nu=M.mu;

T.tu=M.tu;

if(T.tu){

q=1;

for(col=1;

col<

=M.nu;

++col)

for(p=1;

=M.tu;

++p)

if(M.data[p].j==col){

T.data[q].i=M.data[p].j;

T.data[q].j=M.data[p].i;

T.data[q].e=M.data[p].e;

++q;

}//TransposeSMatrix

P100

StatusFastTransposeSMatrix(TSMatrixM,TSMatrix&

T)

{//采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T。

if(T.tu){

for(col=1;

col<

=M.nu;

col++)num[col]=0;

for(t=1;

t<

++t)

++num[M.data[t].j];

//求M中每一列含非零元个数。

copt[1]=1;

//求第col列中第一个非零元在b.data中的序号

for(col=2;

++col)cpot[col]=cpot[col-1]+num[col-1];

for(p=1;

++p){

col=M.data[p].j;

q=cpot[col];

T.data[q].i=M.data[p].j;

T.data[q].j=M.data[p].i;

T.data[q].e=M.data[p].e;

++cpot[col];

}//for

}//if

returnok;

}//FastTranposeSMatrix;

P129,先序遍历

StatusPreOrderTraverse(BitreeT,Status(*Visit)(TelemTypee))

1{

2if(T)

3{

4if(Visit(T->

data))

5if(PreOrderTraverse(T->

lchild,Visit))

6if(PreOrderTraverse(T->

rchild,Visit))returnOK;

7returnERROR;

8}

9elsereturnOK;

10}

中序遍历

StatusInOrderTraverse(BitreeT,Status(*Visit)(TelemTypee))

4if(InOrderTraverse(T->

lchild,Visit))

5if(Visit(T->

6if(InOrderTraverse(T->

P131,中序遍历二叉树

StatusInOrderTraverse(BiTreeT,Status(*Visit)(TelemTypee))

InitStack(S);

Push(S,T);

While(!

StackEmpty(S))

while(GetTop(S,p)&

p)Push(S,p->

lchild);

Pop(S,p);

Visit(p->

data))returnERROR;

Push(S,p->

rchild);

}//if

}//While

}//InOrderTraverse

StatusInOrderTraverse(BiTreeT,Status(*Visit)(TelemTypee))

p=T;

While(p||!

if(p){Push(S,p);

lchild;

else{

data))returnE

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2