数据结构线性表的主要程序代码.docx

上传人:b****5 文档编号:29014240 上传时间:2023-07-20 格式:DOCX 页数:20 大小:17.18KB
下载 相关 举报
数据结构线性表的主要程序代码.docx_第1页
第1页 / 共20页
数据结构线性表的主要程序代码.docx_第2页
第2页 / 共20页
数据结构线性表的主要程序代码.docx_第3页
第3页 / 共20页
数据结构线性表的主要程序代码.docx_第4页
第4页 / 共20页
数据结构线性表的主要程序代码.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构线性表的主要程序代码.docx

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

数据结构线性表的主要程序代码.docx

数据结构线性表的主要程序代码

数据结构顺序表的主要代码(LIZHULIN)

1./***有头结点的单链表的初始化、建立(表头插入、表尾插入)、求长度、插入、删除、输出***/

/***********单链表的初始化、建立、输出*****************/

#include

#include

typedefstructLnode

{/*定义线性表的单链表存储结构*/

intdata;

structLnode*next;

}LinkList;

/****************单链表的初始化*************************/

Initlist(LinkList*L)

{/*动态申请存储空间*/

L=(LinkList*)malloc(sizeof(structLnode));/*建立头结点*/

L->next=NULL;

}

/*************建立一个带头结点的单链表,在表尾插入***************/

Create_L(LinkList*L,intn)

{

LinkList*p,*q;inti;

Initlist(L);/*单链表初始化*/

q=L;

printf("inputthevalue\n");

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

{

p=(LinkList*)malloc(sizeof(structLnode));

scanf("%d",&p->data);/*输入元素值*/

q->next=p;

p->next=NULL;

q=p;

/*插入到表尾*/

}

}/*Create_L*/

/*************建立一个带头结点的单链表,在表头插入**************

Create_L(LinkList*L,intn)

{

LinkList*p;inti;

Initlist(L);/*单链表初始化

/*需要注意第一个数据插入时的情况

/*InserttheFirsetnode

p=(LinkList*)malloc(sizeof(structLnode));

printf("inputthevalue\n");

scanf("%d",&p->data);/*输入元素值

L->next=p;

p->next=NULL;

/*将第二个及后面的数据插入

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

{

p=(LinkList*)malloc(sizeof(structLnode));

printf("inputavalue\n");

scanf("%d",&p->data);/*输入元素值

p->next=L->next;

L->next=p;

/*插入到表头

}

}/*Create_L*/

/*************************求单链表的长度***********************/

intLength_LinkList(LinkList*L)

{

LinkList*p;

inti=0;

p=L->next;

while(p!

=NULL)

{

i++;

p=p->next;

}

returni;

}/*Length_LinkList*/

/*************************在第i个结点前插入数据x*********************/

Insert_LinkList(LinkList*L,inti,intx)

{

LinkList*p,*s;

intj=0;

p=L;

/*寻找第i个结点*/

while(j

=NULL)

{

++j;

p=p->next;

}

if(!

p)return0;/*如果表长小于i,则无意义*/

/*插入元素x*/

s=(LinkList*)malloc(sizeof(structLnode));

s->data=x;

s->next=p->next;

p->next=s;

}

/*********************删除第i个元素,并用y将其值返回************************/

intDelete_LinkList(LinkList*L,inti)

{

LinkList*p,*q;

inty;

intj=0;

p=L;

/*寻找第i个结点*/

while(j

=NULL)

{

++j;

p=p->next;

}

if(!

p)return0;/*如果表长小于i,则无意义*/

q=p->next;

y=q->data;

p->next=q->next;

free(q);

returny;

}/*Delete_LinkList*/

/*******************单链表值的输出****************/

voiddisplay(LinkList*L)/*字母链表的输出*/

{

LinkList*p;

p=L->next;

while(p!

=NULL)

{

printf("%d",p->data);

p=p->next;

}

}

/*************主程序**********************/

main()

{

LinkList*L;

intlen;

intn=0;

intx=15;

inty;

inti=4;

L=(LinkList*)malloc(sizeof(structLnode));

/*L->data=0;*/

L->next=NULL;

printf("inputthelengthofL,n\n");

scanf("%d",&n);

printf("\n");

Create_L(L,n);

Insert_LinkList(L,i,x);

/*y=Delete_LinkList(L,i);

printf("thedeleteelmentisy=%d\n",y);

len=Length_LinkList(L);

printf("thelengthofLis%d",len);*/

display(L);

getch();

}

2./***无头结点的单链表建立、插入、求长度、插入、删除、输出*****/

#include

#include

typedefstructLnode

{/*定义线性表的单链表存储结构*/

intdata;

structLnode*next;

}LinkList;

/*************Create***************/

Link_Creat(LinkList*L,intn)

{

LinkList*q,*p;

inti;

printf("inputthedata\n");

scanf("%d",&L->data);

p=L;

for(i=2;i<=n;i++)

{

q=(LinkList*)malloc(sizeof(structLnode));

scanf("%d",&q->data);

p->next=q;

q->next=NULL;

p=q;

}

}

/**************OutPut*********************/

Link_Display(LinkList*L)

{

LinkList*p;

p=L;

while(p!

=NULL)

{

printf("%d",p->data);

p=p->next;

}

}

/***************Main()**************************/

main()

{

LinkList*L;

intn;

L=(LinkList*)malloc(sizeof(structLnode));

L->data=0;

L->next=NULL;

printf("PleaseinputthelengthofLinkList,n\n");

scanf("%d",&n);

Link_Creat(L,n);

Link_Display(L);

getch();

}

3./*********顺序表的建立、查找、插入运算********/

#include

#include

typedefintdatatype;

#definelist_maxsize20

/*********definefornodestruct************/

typedefstruct

{

datatypedata[list_maxsize];

intlength;

}SqList;

/**********InitList************/

voidInitList(SqList*L)

{

L->length=0;

}

/*******CreatSqList********/

voidCreate_SqList(SqList*L)

{

inti=0;

InitList(L);

printf("inputSqList.data\n");

scanf("%d",&L->data[0]);

while(L->data[i]!

=-1)

{

++i;

scanf("%d",&(L->data[i]));

}

L->length=i;

}

/*********thelengthofSqList****************/

intListLength(SqList*L)

{

returnL->length;

}

/************GetElemL->data[i]************/

intGetElem(SqList*L,inti)

{

if(i<1||i>L->length)

{printf("PositionError");

return;

}

else

returnL->data[i-1];

}

/****************OutputtheSqList**************/

voidDisplay_SqList(SqList*L)

{

inti,n;

n=ListLength(L);

printf("thelengthis%d",n);

for(i=0;i

printf("%d",L->data[i]);

}

/****************Main()**************************/

main()

{

SqList*L;

/*printf("inputthelengthofSqList\n");

scanf("%d",&len);*/

Create_SqList(L);

Display_SqList(L);

getch();

}

4./*********顺序表的归并运算********/

#include

#include

typedefintdatatype;

#definelist_maxsize20

/*********definefornodestruct************/

typedefstruct

{

datatypedata[list_maxsize];

intlength;

}SqList;

/**********InitList************/

voidInitList(SqList*L)

{

L->length=0;

}

/************CreatSqList*************/

voidCreate_SqList(SqList*L)

{

inti=0;

InitList(L);

printf("inputthedataofSqList\n");

scanf("%d",&L->data[0]);

while(L->data[i]!

=-1)

{

++i;

scanf("%d",&(L->data[i]));

}

L->length=i;

}

/*********thelengthofSqList****************/

intListLength(SqList*L)

{

returnL->length;

}

/************GetElemL->data[i]************/

intGetElem(SqList*L,inti)

{

if(i<1||i>L->length)

{printf("GetelemPositionError");

return;

}

returnL->data[i-1];

}

/************InsertOperation*********/

voidListInsert(SqList*L,inti,intx)

{

SqList*q,*p;

if(i<1||i>L->length)

{

printf("theinsertpositionerror");

return;

}

q=&(L->data[i-1]);/*q为插入位置*/

for(p=&(L->data[L->length-1]);p>=q;--p)

*(p+1)=*p;

L->data[i-1]=x;

++L->length;

}

/*********LAandLBMergedLC***************/

voidMergeList(SqList*LA,SqList*LB,SqList*LC)

{

intLa_len,Lb_len,ai,bj;

inti,j;

intk;

i=j=1;

InitList(LC);

La_len=ListLength(LA);

Lb_len=ListLength(LB);

LC->length=La_len+Lb_len;

/*for(k=0;klength;k++)

LC->data[k]=0;*/

k=0;

while((i<=La_len)&&(j<=Lb_len))

{

ai=GetElem(LA,i);

bj=GetElem(LB,j);

if(ai

{

++k;

ListInsert(LC,k,ai);

++i;

}

else

if(ai==bj)

{

++k;

ListInsert(LC,k,ai);

++k;

ListInsert(LC,k,bj);

++i;++j;

}

else

{

++k;

ListInsert(LC,k,bj);

++j;

}

}

while(i<=La_len)

{

/*AppendtheresidualnodeintoLA*/

ai=GetElem(LA,i);

++i;++k;

ListInsert(LC,k,ai);

}

while(j<=Lb_len)

{

/*AppendtheresidualnodeintoLA*/

bj=GetElem(LB,j);

++j;++k;

ListInsert(LC,k,bj);

}

LC->length=La_len+Lb_len;

}

/****************OutputtheSqList**************/

voidDisplay_SqList(SqList*L)

{

inti,n;

n=ListLength(L);

printf("thelengthis%d",n);

for(i=0;i

printf("%d",L->data[i]);

}

/****************Main()**************************/

main()

{

SqList*LA,*LB,*LC;

Create_SqList(LA);

Create_SqList(LB);

MergeList(LA,LB,LC);

Display_SqList(LC);

getch();

}

5./****用带头结点的循环单链表解决约瑟夫问题***********/

#include

#include

typedefstructLnode

{/*定义线性表的单链表存储结构*/

intdata;

structLnode*next;

}LinkList;

/****************单链表的初始化*************************/

Initlist(LinkList*L)

{/*动态申请存储空间*/

L=(LinkList*)malloc(sizeof(structLnode));/*建立头结点*/

L->next=L;

}

/*************建立一个带头结点的循环单链表,数据值为1,2,3,...n,在表尾插入***************/

Create_L(LinkList*L,intn)

{

LinkList*p;inti;

Initlist(L);/*单链表初始化

p=L;

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

{

q=(LinkList*)malloc(sizeof(structLnode));

q->data=i;/*输入元素值

p->next=q

q->next=L;

/*插入到表尾

}

}/*Create_L*/

/*******************单链表值的输出****************/

voiddisplay(LinkList*L)/*字母链表的输出*/

{

LinkList*p;

p=L->next;

while(p->next!

=L)

{

printf("%d",p->data);

p=p->next;

}

}

/*************主程序**********************/

main()

{

LinkList*L;

intn;

L=(LinkList*)malloc(sizeof(structLnode));

/*L->data=0;*/

L->next=L;

printf("inputthelengthofL,n\n");

scanf("%d",&n);

printf("\n");

Create_L(L,n);

display(L);

getch();

}

6./********无头结点的循环单链表的建立**************/

#include

#include

typedefstructLnode

{/*定义线性表的单链表存储结构*/

intdata;

structLnode*next;

}LinkList;

/*************Create***************/

Link_Creat(LinkList*L,intn)

{

LinkList*q,*p;

inti;

printf("inputthedata\n");

scanf("%d",&L->data);

p=L;

for(i=2;i<=n;i++)

{

q=(LinkList*)malloc(sizeof(structLnode));

scanf("%d",&q->data);

p->next=q;

q->next=NULL;

p=q;

}

p->next=L;/*尾结点指向第一个结点*/

}

/**************OutPut*********************/

Link_Display(LinkList*L)

{

LinkList*p;

p=L;

printf("%d",p->data);

p=p->next;

while(p->next!

=L)

{

printf("%d",p->data);

p=p->next;

}

}

/***************Main()**************************/

main()

{

LinkList*L;

intn;

L=(LinkList*)malloc(sizeof(structLnode));

L->data=0;

L->next=NULL;

printf("PleaseinputthelengthofLinkList,n\n");

scanf("%d",&n);

Link_Creat(L,n);

Link_Display(L);

getch();

}

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

当前位置:首页 > PPT模板 > 节日庆典

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

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