数据结构核心算法大全文档格式.docx
- 文档编号:15780574
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:183
- 大小:59.38KB
数据结构核心算法大全文档格式.docx
《数据结构核心算法大全文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构核心算法大全文档格式.docx(183页珍藏版)》请在冰豆网上搜索。
//单链表数据类型
LNode*CreateLinkList()//生成单链表
LNode*head,*p,*q;
charx;
head=(LNode*)malloc(sizeof(LNode));
//生成头结点
head->
next=NULL;
p=head;
q=p;
//q始终指向链尾结点
printf("
Inputanycharstring:
\n"
);
scanf("
%c"
&
x);
while(x!
='
\n'
)
{
p=(LNode*)malloc(sizeof(LNode));
p->
data=x;
q->
next=p;
//在链尾插入
}
returnhead;
//返回指向单链表的头指针head
}
voidConvert(LNode*H)//单链表的逆置
LNode*p,*q;
p=H->
next;
//p指向剩余结点链表的第一个数据结点
H->
//新链表H初始为空
while(p!
=NULL)
//从剩余结点链表中取出第一个结点
p=p->
//p继续指向剩余结点链表新的第一个数据结点
next=H->
//将取出的结点*q插入到新链表H的链首
next=q;
voidmain()
LNode*A,*p;
A=CreateLinkList();
//生成单链表A
Convert(A);
//单链表逆置
p=A->
//输出逆置后的单链表
p->
data);
双链表合并
//对两个元素递增有序的单链表A和B,编写算法将A、B合并成一个按元素递减有序的单链表C,要求算法使用A\B中原有的结点,不允许增加新结点
intdata;
//data为结点的数据信息
inti,n;
//指针q始终指向链尾结点
Inputlengthoflist:
%d"
n);
//读入节点数据
Inputdataoflist:
for(i=1;
i<
=n;
i++)//生成链表的数据结点
//申请一个节点空间
p->
//返回单链表的头指针head
voidMerge(LNode*A,LNode*B,LNode**C)//将升序链表A\B合并成降序链表C
LNode*p,*q,*s;
//p始终指向链表A的第一个未比较的数据结点
q=B->
//q时钟指向链表B的第一个未比较的数据节点
*C=A;
//生成的链表的*C的头结点
(*C)->
free(B);
//回收链表B的头结点空间
=NULL&
&
q!
=NULL)//将A、B两链表中当前比较节点中值小者赋给*S
if(p->
data<
q->
data)
s=p;
else
s=q;
q=q->
s->
next=(*C)->
//用头插法将结点*S插到链表*C的头结点之后
next=s;
if(p==NULL)//如果指向链表A的指针*P为空,则使*P指向链表B
p=q;
=NULL)//将*P所指链表中剩余结点依次摘下插入的链表C的链首
voidprint(LNode*p)//输出单链表
%4d"
LNode*A,*B,*C;
OutputlistA:
print(A);
//输出单链表A
InputdataofB:
B=CreateLinkList();
OutputlistofB:
print(B);
MakelistC:
Merge(A,B,&
C);
//将升序链表A、B合并成降序链表C
OutputlistofC:
print(C);
静态链表
#defineMAXSIZE30
typedefstruct
//data为结点数据信息
intcursor;
//cursor标示直接后继结点
}SNode;
voidInsertList(SNodeL[],inti,charx)//在静态链表中插入元素
intj,j1,j2,k;
j=L[0].cursor;
//j指向第一个数据结点
if(i==1)//作为第一个数据结点插入
if(j==0)//静态链表为空
L[1].data=x;
//将x放入结点L[1]中
L[0].cursor=1;
//头指针cursor指向这个新插入的结点
L[1].cursor=0;
//置链尾标示
k=j+1;
while(k!
=j)//在数组中循环查找存放x的位置
if(L[k].cursor==-1)//找到空位置
break;
k=(k+1)%MAXSIZE;
//否则查找下一个位置
if(k!
=j)//在数组中查找一个空位子来存放x
L[k].data=x;
L[k].cursor=L[0].cursor;
//将其插入到静态链表表头
L[0].cursor=k;
Listoverflow!
//链表已满无法插入
else//不是作为第一个结点插入时
k=0;
while(k<
i-2&
j!
=0)//查找第i-1个结点,j不等于0则表示未到链尾
k++;
j=L[j].cursor;
if(j==0)//查完整个静态链表未找到第i-1个结点,即链表长度小于i-1个结点
Inserterror\n"
j1=j;
//找到第i-1个结点
j2=L[j].cursor;
//用j2保存原L[j].cursor值,此值为第i个结点的位置值
=j)//在数组中找到一个空位置来存放x
L[j1].cursor=k;
//作为第i个结点链入到静态链表
L[k].cursor=j2;
//新结点之后再连接上原第i个结点
//链表已满,无法插入
voidprint(SNode*L)//输出静态链表
inti;
i=L[0].cursor;
//从静态链表的表头元素开始输出
while(i!
=0)
L[i].data);
i=L[i].cursor;
SNodeL[MAXSIZE];
MAXSIZE;
i++)//静态链表初始化
L[i].cursor=-1;
L[0].cursor=0;
//静态链表初始为空标志
i=1;
Inputelementoflist\n"
//建立静态链表
InsertList(L,i,x);
i++;
Inputsiteandelementofinsert\n"
%d.%c"
i,&
//输入要插入的元素的位置
//在静态链表中插入元素
Outputlist:
print(L);
//输出静态链表
链表的基本运算
//单链表结点类型
LNode*CreateLinkList()//在表尾生成单链表
p=he
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 核心 算法 大全
![提示](https://static.bdocx.com/images/bang_tan.gif)