当前位置:文档之家› 数据结构导论

数据结构导论

}sqstackTp;else
进桡:{ *x=sq->data[sq->top];
int push(sqstackTp *sq,DataType x)sq->top--;
{return(1);}
if(sq->top= =sqstack_maxsize-1);
{error(桡满);return 0;}取顶元素:
DataType data;if(ls!=null)
Struct node *next;{p=ls;
}LstackTp;*x=p->data;
进桡:ls=ls->next;
void push(LstackTp *ls,DataType x)free(p);
{LstackTp *p;return 1;
while(! EmptyStack(&ls))
{ pop(&ls,&x);
p->data=x;
p=p->next;}
}
基于三元组的稀疏矩阵转置处理算法:
Trans_sparmat(SpMatrixTp a,spMatrixTp *b)
{
(*b).mu=a.nu;(*b).nu=a.mu;(*b).tu=a.tu
数据结构导论
const maxsize=顺序表的容量;
typedf struct
{datatype data[maxsize];
int last;
{sqlist;
sqlist L;
顺序表的插入算法:
void insert_sqlist(sqlist L,datetype x,int i)
{
if(st==maxsize)error(‘表潢’);
return(y);else return(b(n-1)+b(n-2));
}}
先根遍历非递归算法的非形式
while(桡不空)
{ s=桡顶元素;退桡;
while(s!=null)
{ visit(s);
s->rchild进桡;
s=s->lchild;
}
}
先根遍历的非递归算法:哈夫曼算法:
void preorderl(bitreptr t)voidHuffman(int k, float W[t],hftree T)
while((i<=st)&&(L.data[i-1]!=x))
i++;
if(i<=st) return(i)
else return(0)
}
单链表类型定义
typedef struct node *pointer;
struct node
{datatype data;
pointer next;
{ if(r!=null) { if(r!=null)
{ visit(r); { inorder(r->lchild);
preorder(r->lchild); visit(r);
preorder(r->rchild); inorder(r->rchild);
} }
} }
后根遍历算法:将计算阶乘函数n!的递归算法转换成非递归算法:
s=s->lchild;for(j=0;j<k+i;j++)
}if((T[j].wt<m)&&(T[j].parent= = -1))
}{ n=m;y=x;m=T[j].wt;x=j;}
}else if((T[j].wt<n)&&(T[j].parent= = -1))
判定树对应的分类算法如下:{ n=T[j].wt;y=j;}
for(t=1;t<=a.tu;t++) num[a.data[t].j]++;
cpot[1]=1;
for(col=2;col<=a.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=a.tu;p++)
{col=a.data[p].j;q=cpot[col];
}0 n=0
计算n!的循环算法:Fib(n)= 1 n=1
int f1(int n)Fib(n-1)+Fib(n-2) n>1
{ y=1;int b(int n)
for(i=1;i<=n;i++){ if(n= =0) return(0);
y=y*i;else if(n= =1) return(1);
(*b).data[q].i=a.data[p].j;
(*b).data[q].j=a.data[p].i;
(*b).data[q].v=a.data[p].v;
cpot[col]++;
}
}
}算法的时间复杂度为:O(nu+tu)
先根遍历算法:中根遍历算法:
void preorder(bitreptr r) void preorder(bitreptr r)
p=(LstackTp *)malloc(sizeof(LstackTp));}elsereturn 0;
p->data=x;}
p->next=ls;
ls=p;
}
写一个算法,借助桡将一个带头结点的单链表倒置。计算阶乘函数的递归算法:
Void reverse_list(LinkedListTP *head)long f(int n)
顺序ቤተ መጻሕፍቲ ባይዱ类型的定义:
#define sqstack_maxsize 6退桡:
typedef struct sqstack int pop(sqstackTop *sq,DataType *x)
{ DataType data[sqstack_maxsize];{if (sq->top= =0)
int top;{error(“下溢”); return(0);}
else {sq->top ++;int GetTop(sqstackTp *sq,DataType *x)
sq->data[sq->top]=x;{ if(sq->top= =0) return 0;
return (1);esle
}{ *x=sq->data[sq->top];
};return (1);
判桡空:}
int Emptystack(sqStackTp sq)}
{ if(sq.top= =0)
return(1);
elsereturn(0);
}
链桡的类型定义:退桡:
typedef struct nodeint pop(LstackTp *ls,DataType*x)
{{LstackTp *p;
{ bitreptr stack[stacksize];{ inti,j,x,y;
int top;float m,n;
top=0;stack[top]=t;for (i=0;i<2*k-1;i++)
while(top>=0){ T[i].parent=-1; T[i].lchild=-1; T[i].rchild=-1;
{
if((i<1)||(i>st)) error(非法位置);
for(j=i+1;j=st;j++)
L.data[j-2]=L.data[j-1];
st=st-1
}
顺序表的查找算法:
int locate_sqlist(sqlist L,datatype X)
{
i=1;
{{
p=p->next;j++;q=p->next;
}p->next=q->next;
if p->data= =x return(j);free(q);
else return (0);}
}else error(‘不存在第i个结点’)
}
双链表定义:
typedef struct dnode *dpointer;双链表删除:
{ s=stack[top];if(i<m) T[i].wt=w[i];
top--;else T[i].wt=0
while(s!=null)}
{ visit(s);for (i=0;i<k-1;i++)
top++; stack[top]=s->rchild;{ x=0;y=0;m=maxint;n=maxint;
struct dnodep->prior->next=p->next;
{ datatype data;p->next->prior=p->prior;
dpointer prior,next;双链表插入:
}1、q->prior=p; 3、p->next->prior=q;
typedef dpointer dlklist;2、q->next=p->next; 4\p->next=q;
if (a.tu)
{
q=1;
for (col=1;co;<=a.nu;col++)
for (p=1;p<=a.tu;p++)
if(a.data[p].j= =col)
{
(*b).data[q].i=a.data[p].j;
(*b).data[q].j=a.data[p].i;
相关主题