数据结构第二章Word文档格式.docx
- 文档编号:16440799
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:12
- 大小:267.78KB
数据结构第二章Word文档格式.docx
《数据结构第二章Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构第二章Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
//datatype类型为int
Typedefstruct{
Datatypedata(listSize);
//数组data用来存放表结点
Intlength;
//线性表的表长
}seqlist;
四、顺序表插入算法
VoidInsertlist(SeqList*L,intI,DataTypex)
{//在顺序表L中第i个位置之前插入一个新元素a
Intj;
If(i<
1||i>
i->
length+1)(
Printf(“positionerror”);
Return;
If(L->
length>
=ListSize)(
Printf(“overfloew”);
For(j=L->
length-1;
j>
=i-1;
j--)
L->
data(j+1)=l->
data[j]//从最后一个元系开始后移
data[i-1]=x;
//插入新元素x,i-1个元素实际为第i个元素
Length++;
//表长度加1
五、顺序表L中删除第i个元素
DataTypeDeletelist(Seqlist*L,inti)
{//顺序表L中删除第i个元素,并返回被删除元素
DataTypex;
//DataType是一个通用标识符,在使用时再定义实际类型
1||i>
L->
length)
Exit(0);
X=L->
data[i];
//保存被删除元素
For(j=1;
j<
=L->
Length-1;
j++)
data[j-1]=L-data[j];
//元素前移
length--;
//实际表长减1
Returnx;
//返回被删除的元素
六、将顺序线性表,将该线性表逆置
SeqListConverts[SeqListL]
{DataTypex;
K=l.length/2;
For(i=0;
k;
i++){
X=L.data[i];
L.data[i]=L.data[L.length-i-1];
L.data[L.length-i-1]=x;
ReturnL;
七、找到最大值及最小值及位置
VoidMaxMin(SeqListL,DataType*max,DataType*min,int*k,int*j)
{inti;
*max=L.data[0];
*min=L.data[0];
*k=*j=1;
//先假设第一个元素就是最大值,也是最小值
=L.length;
i++)
If(L.data[i]>
*.max){
*max=L.data[i];
*k=i;
Whileif(L.data[i]<
*min){
*min=L.data[i];
*j=i;
}
七、链式存储(头插法)
LinklistCreaateListF(0
LinkListhead;
ListNode*p;
Charch;
Head=NULL;
//置空单链表
Ch=getchar();
读入第一个字符
While(ch!
=’\n’){
P=(ListNode*)malloc(sizef(listNode));
//申请新节点
p->
data=ch;
//数据域赋值
next=head;
//指针域赋值
head=p;
//头指针指向新节点
ch=getchar();
//读入下一个字符
Returnhead;
//返回链表头指针
八、尾插法
LinkListCreatelistR()
{LinkListhead,rear;
Charch;
Head=NULL;
rear=NULL;
Ch=getchar();
//读入第一个字符
While(ch!
P=(ListNode*)malloc(sizeof(ListNode));
//申请新结点
//读入数据赋值
if(head==NULL)head=p;
//新结点*P插入空表
elserear->
next=p;
//新结点*p插入到非空结点
rear=p;
//尾指针指向新表尾
if(rear!
=NULL)rear->
next=NULL;
//终端结点域置空
returnhead;
另引入头结点后,尾插法可简化为:
p->
r=next=p;
//新结点连接到尾结点之后
r=p;
//尾指针指向新结点
九、带头结点单链表的查找算法
ListNode*GetNode(LinkListhead,inti)
//head为带头结点的单链表头指针,i为要查找的序号
//若查找成功,则返回查找结点存储地址,否则返回NULL
ListNode*p;
intj;
p-head->
next;
j=1;
//使p指向第一个结点,j置1
while(p!
=NULL&
&
i)//顺时针找,直到P指向第i个结点
p=p->
++j;
If(j==i)
ReturnP;
Else
ReturnNULL;
按值查找:
ListNode*locatenodek(Linklisthead,DataTypek)
//head为带头结点单链表的头指针,k要查找的结点的值
ListNode*p=head->
While(p&
p-data!
=k)
P=p->
Returnp;
在P结点之后插入新结点*S
VoidinsertList(LinkListhead,intI,DataTypex)
//在以head为头指针的带头结点的单链表中第i个结点位置插入一个x新结点
ListNode*p,*s;
P=head;
j=0;
While(p!
=NULL&
i-1){
If(p==NULL){
Printf”(error\n”);
return;
Else{
S=(ListNode*)malloc(sizef(ListNode));
S->
data=x;
s->
next=p->
P->
next=s;
删除操作:
s=p->
next=s->
x=s->
data;
free(s);
returnx;
十、单链表A分解马A和B,其中头结点分别为a和b,使得A中为奇数元素,B中为偶数元素。
VoidsPlit(LinkLista,linkListb)
{//按序号奇偶分解单链表,注意b在调用前是一个带头结点的空链表
ListNode*p,*r,*r;
P=a->
//p指向表头结点
R=a;
//r指向表A的当前结点
S=b;
//s指向表B的当前结点
While(p!
=NULL){
r->
//把序号为奇数的结点链接到A表上
r=p;
//r总是指向A表的最后一个结点
p=next;
if(p){
s->
//序号为偶数的结点链接到B表上
s=p;
//s总是指向B表的最后一个结点
//P指向原链表A中的偶数序号的结点
十二、将La和Lb单链表(带头结点),两个单链表都是按数值递增有序的,将这两个表合并成为一个有序表Lc。
LinkListMergeList(LinkListla,LinklistLb)
{//归并两个有序表la和lb为有序表lc
ListNode*pa,*pb,*pc;
LinkListLc;
Pa=La->
pb=Lb->
//pa,pb分别指向两个链表开始结点
Lc=pc=La;
//用La的头结点做为Lc的头结点
While(pa!
pb!
If(pa->
data<
=pb->
data){
Pc->
next=pa;
pc=pa;
pa=pa->
//将pa指向结点指向pc
Else{
Pc->
next=pb;
pc=pb;
pb=pb->
//将pb指向结点指向pc
Pc->
next=pa!
=NULL?
pa:
pb;
/插入剩余部分,哪个不空,就插哪个
Free(Lb);
//释放lb头结点
ReturnLc;
//返回合并后的表
十三、从大到小顺序排列的头结点指针为L的非空单循环链表,插入一个结点并保持有序。
Voidinsertlist(LinkListL,intx)
{//将值为x的新结点插入到有序循环表中适当位置
listNode*s,*p,*q;
s=(ListNOde*)malloc(sizeof(ListNode));
//申请结点存储空间
p=L;
q=p->
//q指向开始结点
while(q->
data>
x&
q!
=L){
p=->
//p指向q的前趋
//q指向当前节点
p-next=s;
//插入*s结点
s->
next=q;
十四、在双负链表*P之前插入一结点
VoidDLInsert(Dlnode*p,DataTypex)
{//将值为x的新结噗插入到带头结点的双向链表的*P之前
DLNode*s=(DLNOde*)malloc(sizeof(DLNode));
s-prior=prior;
prior->
prior=s;
双向链表删除结点:
DataTypeDLDelete(DlNode*P)
next->
prior=p->
prior;
x=p->
free(p);
returnx;
十五、将一个头结点指针为head的循环链表,写一算法,将其修改为真正的双向循环链表
Voidtrans(Dlinklisthead)
{
Dlnode*p;
P=head;
//使p指向头结点
While(p->
next!
=head){
prior=p;
//p指结点的直接后继的前趋就是p
p=p->
//p指向下一个结点
Head->
//head的前趋指向表的终端结点
两个顺序表A和B,都递增有序,从A中删除与B相同的元素。
带头结点的单链表,将P指向结点与后继结点位置交换。
已知两个集合A,B,递增有序,设计A与B的交集。
设带头结点的双向循环链表,head为头指针,在x之前插入一个值为y的结点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第二
![提示](https://static.bdocx.com/images/bang_tan.gif)