数据结构线性表的主要程序代码.docx
- 文档编号:29014240
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:20
- 大小:17.18KB
数据结构线性表的主要程序代码.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;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;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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 主要 程序代码