数据结构代码.docx

上传人:b****1 文档编号:18079544 上传时间:2023-04-24 格式:DOCX 页数:22 大小:20.10KB
下载 相关 举报
数据结构代码.docx_第1页
第1页 / 共22页
数据结构代码.docx_第2页
第2页 / 共22页
数据结构代码.docx_第3页
第3页 / 共22页
数据结构代码.docx_第4页
第4页 / 共22页
数据结构代码.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据结构代码.docx

《数据结构代码.docx》由会员分享,可在线阅读,更多相关《数据结构代码.docx(22页珍藏版)》请在冰豆网上搜索。

数据结构代码.docx

数据结构代码

数据结构代码

P20,例2-1

voidunion(List&La,ListLb){

La_len=ListLength(La);Lb_len=ListLength(Lb);

for(i=1;i<=Lb_len;i++){

GetElem(Lb,i,e);

if(!

LocateElem(La,e,equal))

ListInsert(La,++La_len,e);

}

}

P21,例2-2,将

voidMergeList(ListLa,ListLb,List&Lc){

InitList(Lc);

i=j=1;k=0;

La_len=ListLength(La);Lb_len=ListLength(Lb);

while((i<=La_Len)&&(j<=Lb_len)){

GetElem(La,i,ai);GetElem(Lb,j,bj);

if(ai<=bj){ListInsert(Lc,++k,ai);++i;}

else{ListInsert(Lc,++k,bj);++j}

}

while(i<=La_len){

GetElem(La,i++,ai);ListInsert(Lc,++k,ai);

}

while(j<=Lb_len){

GetElem(Lb,i++,bj);ListInsert(Lc,++k,bj);

}

}

P22,线性表的顺序存储结构

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

typedefstruct

{

ElemType*elem;/*线性表占用的数组空间*/

intlength;

intlistsize;

}SqList;

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

初始化操作

StatusIniList_Sq(SqList&L){

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

if(!

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));

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;

returnOK;

}

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

StatusListDelete_Sq(SqList&L,inti,ElemType&e){

if((i<1)||(i>L.length))returnERROR;

p=&(L.elem[i-1]);

e=*p;

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

for(++p;p<=q;++p)*(p-1)=*p;

--L.length;

returnOK;

}

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 LNode *next;

}LNode ,*LinkList;/*LinkList为结构指针类型*/

P29,查找元素

Status GetElem_L(LinkList L,int i,ElemType&e){

 p=L->next;

 j=1;

while (p&&j

      p=p->next;   

++j;

}

if (!

p||j>i)return  ERROR;

e=p->data;

return  ok;

}

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

Status ListInsert_L(LinkList &L, int i,ElmeType e ){

p=L;j=0; 

while(p&&j

p=p->next;

++j;

}

if(!

p||j>i-1)  return  ERROR;

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

s->data=e;

s->next=p->next;

p->next=s;

return  OK;

}

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

Status ListDelete_L(LinkList &L, int i, Elemtype &e){

p=L;j=0;

while (p->next&&j

p=p->next;

++j;

}

if (!

(p->next)||j>i-1)  return  ERROR ;

q=p->next;

p->next=q->next;

e=q->data;

free(q);

return OK;

}

P30,建立单链表

void  CreateList_L(LinkList &L, int n){

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

L->next=NULL;

for(i=n;i>0;--i){

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

scanf(&p->data);

p->next=L->next;

L->next=p;

}

}

P31,合并单链表

void mergelist_L(LinkList &La,LinkList&Lb,LinkList &Lc){

pa=La->next;pb=Lb->next;

Lc=pc=La;

while(pa&&pb) {

if(pa->data<=pb->data){ 

     pc->next=pa;pc=pa;pa=pa->next; 

     }

else{

pc->next=pb;pc=pb;pb=pb->next;

}

}

pc->next=pa?

pa:

pb;

free(Lb);

}

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

#define MAXSIZE 1000

typedef struct {

ElemType data;

int cur;

}component,SlinkList[MAXSIZE];

P32,定位函数

int LocateElem_SL(SlinkList s,ElemType e){

i=s[0].cur;

while(i&&s[i].data!

=e)   i=s[i].cur;

return i;

}

P33,

void IniteSpace_SL(SlinkList &space){

for(i=0;i

space[MAXSIZE-1].cur=0;

}

int Malloc_SL(SlinkList &space){

i=space[0].cur;

if (space[0].cur)

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

returni;

}

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

typedef struct DulNode{     

ElemType  data;

     struct DulNode  *prior, *next;

}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;

returnOK;

}

取栈顶元素

StatusGetTop(SqStackS,SElemType&e){

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

e=*(S.top-1);

returnOK;

}

入栈

StatusPush(SqStack&S,SElemTypee){

if(S.top-S.base>=S.stacksize){

S.base=(SElemType*)realloc(S.base,

(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!

S.base)exit(OVERFLOW);

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

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

returnOK;

}

出栈

StatusPop(SqStack&S,SelemType&e){

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

e=*--S.top;

returnOK;

}

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,链式队列的定义

#defineTRUE1

#defineFALSE0

typedefstructQNode{

QElemTypedata;

structQNode*next;

}QNode,*QueuePtr;

typedefstruct{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

P62,初始化

StatusInitQueue(LinkQueue&Q)

{

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

if(!

Q.front)exit(OVERFLOW);

Q.front->next=NULL;

returnOK;

}

销毁队列

StatusDestroyQueue(LinkQueue&Q)

{

while(Q.front){

Q.rear=Q.front->next;

free(Q.front);

Q.front=Q.rear;

}

returnOK;

}

入队操作

StatusEnQueue(LinkQueue&Q,QelemTypee)

{

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

if(!

p)exit(OVERFLOW);

p->data=e;p->next=NULL;

Q.rear->next=p;

Q.rear=p;

returnOK;

}

出队操作

StatusDeQueue(LinkQueue&Q,QelemType&e)

{

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

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

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

free(p);

returnOK;

}

P64,循环对列定义

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

typedefstruct{

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;

returnOK;

}

入队操作

StatusEnQueue(SqQueue&Q,QElemTypee){

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

Q.base[Q.rear]=e;

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

returnOK;

}

)出队操作

StatusDeQueue(SqQueue&Q,QElemType&e){

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

e=Q.base[Q.front];

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

returnOK;

}

求队列长度

intQueueLength(SqQueueQ)

{

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

}

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

#include

#defineMAX_ARRAY_DIM8

typedefstruct{

ELemType*base;//数组元素基址

intdim;//数组维数

int*bounds;//数组维数基址

int*constants;//数组映像函数常量基址

}Array;

P98,三元数组顺序表存储

#defineMAXSIZE12500

typedefstruct{

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;p<=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;

}

}

returnOK;

}//TransposeSMatrix

P100

StatusFastTransposeSMatrix(TSMatrixM,TSMatrix&T)

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

T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;

if(T.tu){

for(col=1;col<=M.nu;col++)num[col]=0;

for(t=1;t<=M.nu;++t)

++num[M.data[t].j];//求M中每一列含非零元个数。

copt[1]=1;

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

for(col=2;col<=M.nu;++col)cpot[col]=cpot[col-1]+num[col-1];

for(p=1;p<=M.tu;++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))

1{

2if(T)

3{

4if(InOrderTraverse(T->lchild,Visit))

5if(Visit(T->data))

6if(InOrderTraverse(T->rchild,Visit))returnOK;

7returnERROR;

8}

9elsereturnOK;

10}

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);

if(!

StackEmpty(S))

{

Pop(S,p);if(!

Visit(p->data))returnERROR;

Push(S,p->rchild);

}//if

}//While

returnOK;

}//InOrderTraverse

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

{

InitStack(S);p=T;

While(p||!

StackEmpty(S))

{

if(p){Push(S,p);p=p->lchild;}

else{

Pop(S,p);if(!

Visit(p->data))returnE

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

当前位置:首页 > 小学教育 > 语文

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

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