数据结构线性表的主要程序代码.docx
《数据结构线性表的主要程序代码.docx》由会员分享,可在线阅读,更多相关《数据结构线性表的主要程序代码.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构线性表的主要程序代码
数据结构顺序表的主要代码(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;iprintf("%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;iprintf("%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();
}