一些算法源代码Word下载.docx
- 文档编号:13723512
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:12
- 大小:17.53KB
一些算法源代码Word下载.docx
《一些算法源代码Word下载.docx》由会员分享,可在线阅读,更多相关《一些算法源代码Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
j--)L->
elem[j]=L->
elem[j-1];
L->
elem[i-1]=e;
length++;
returnOK;
}
StatusListDelete(SqList*L,inti,ElemType*e)
/*删除删除第I个元素ai*/
if(i<
1||i>
length)returnERROR;
*e=L->
elem[i-1];
for(j=i;
j<
j++)L->
elem[j-1]=L->
elem[j];
length--;
2.顺序表的逆置;
voidex2_3(SqList*L)
{
inti,j;
ElemTypetemp;
i=0;
j=L->
length-1;
while(i<
j)
{
temp=L->
elem[i];
elem[i]=L->
elem[j]=temp;
i++;
j--;
}
3.单链表的插入和删除结点算法
structLNode
ElemTypedata;
structLNode*next;
};
StatusListInsert(structLNode**L,inti,ElemTypee)
{/*在带表头的单链表中在第i个位置插入元素e*/
structLNode*p,*s;
intj;
p=*L;
j=0;
/*注意与前面的区别这里j=0;
p=*L;
*/
while(p&
&
j<
i-1)
{/*找i-1位置的元素*/
p=p->
next;
j++;
if(!
p||j>
i-1)returnERROR;
/*找不到*/
s=(structLNode*)malloc(sizeof(structLNode));
/*找到*/
s->
data=e;
next=p->
/*插入元素*/
p->
next=s;
}/*ListLink_L;
StatusListDelete(structLNode**L,inti,ElemType*e)
{/*在带表头的单链表中在第i个位删除结点,并由pe指针返回其值*/
structLNode*p,*q;
while(p->
next&
i-1)
if(!
(p->
next)||j>
i-1)returnERROR;
q=p->
next=q->
*e=q->
data;
free(q);
}/*ListDelete*/
4.稀疏矩阵(三元组存储)取元素的值;
#defineMAXSIZE100
typedefstruct{
inti,j;
/*该非零元的行下标和列下标*/
ElemTypee;
/*该非零元的值*/
}Triple;
/*三元组类型*/
typedefstruct{
Tripledata[MAXSIZE+1];
intmu,nu,tu;
}TSMatrix;
ElemTypeGetData(TSMatrixM,introw,intcol)
{//取矩阵的元素
intp;
for(p=1;
p<
=M.tu;
p++)
if(M.data[p].i==row&
M.data[p].j==col)returnM.data[p].e;
return0;
voidSetData(TSMatrix*M,introw,intcol,ElemTypee)
{//改矩阵的元素
intp,q;
p=1;
if(e)
{//e不为0,则在三元组顺序表中查找row行col列的非零元,
//若存在row行col列元素,将该元素的值改为e;
//若不存在row行col列元素则在三元组顺序表中插入(row,col,e)
while(p<
=M->
tu&
M->
data[p].i*M->
nu+M->
data[p].j<
row*M->
nu+col)
p++;
if(M->
data[p].j==row*M->
nu+col&
tu)
//存在row行col列元素,将该元素的值改为e
M->
data[p].e=e;
else
//不存在row行col列元素则在三元组顺序表中插入(row,col,e)
for(q=M->
tu;
q>
=p;
q--)
M->
data[q+1]=M->
data[q];
data[p].i=row;
data[p].j=col;
tu++;
//e为0,则在三元组顺序表中查找row行col列的非零元,
//若存在row行col列元素,将该元素删除;
5.二叉树的三种递归遍历,计算叶子结点数目,输出叶子结点
typedefstructBiTNode{/*结点结构*/
TElemTypedata;
structBiTNode*lchild,*rchild;
/*左右孩子指针*/
}BiTNode,*BiTree;
voidPreOrderTraverse(BiTreeT)
{/*前序*/
if(T!
=NULL)
printf("
%d"
T->
data);
PreOrderTraverse(T->
lchild);
rchild);
voidInOrderTraverse(BiTreeT)
{/*中序*/
InOrderTraverse(T->
printf("
InOrderTraverse(T->
voidPostOrderTraverse(BiTreeT)
{/*后序*/
PostOrderTraverse(T->
6.Huffman算法;
unsignedintweight;
unsignedintparent,lchild,rchild;
}HTNode,HuffmanTree[MAXNODE+1];
/*数组存储赫夫曼树*/
voidCreateHuffmanTree(HuffmanTreeht,int*w,unsignedintn)
{/*w存放n个叶子结点的权值,构造赫夫曼树ht*/
unsignedintm,i,s1,s2;
if(n<
=1)return;
m=2*n-1;
for(i=1;
i<
=n;
i++)
{ht[i].weight=w[i-1];
ht[i].parent=0;
ht[i].lchild=0;
ht[i].rchild=0;
for(i=n+1;
=m;
++i){
select(ht,i-1,&
s1,&
s2);
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].lchild=s1;
ht[i].rchild=s2;
ht[i].parent=0;
ht[i].weight=ht[s1].weight+ht[s2].weight;
7.图的关于邻接点的操作;
邻接表存储结构:
typedefcharVexType;
typedefstructArcNode{
intadjvex;
/*该弧所指向的顶点的位置*/
structArcNode*nextarc;
/*指向下一条弧的指针*/
}ArcNode;
typedefstructVNode{
VexTypedata;
/*顶点信息*/
ArcNode*firstarc;
/*指向第一条依附该顶点的弧*/
}VNode,AdjList[MAXVEX];
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
intFirstAdjVex(ALGraphgraph,intv)
{if(graph.vertices[v].firstarc!
return(graph.vertices[v].firstarc)->
adjvex;
elsereturn-1;
intNextAdjVex(ALGraphgraph,intv,intw)
{ArcNode*p;
for(p=graph.vertices[v].firstarc;
p!
=NULL;
p=p->
nextarc)
if(p->
adjvex==w){
if(p->
nextarc!
returnp->
nextarc->
else
return-1;
}
return-1;
邻接矩阵存储结构:
typedefintAdjType;
typedefAdjTypeAdjMatrix[MAXVEX][MAXVEX];
typedefstruc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一些 算法 源代码