数据结构与算法实验报告线性表.docx
- 文档编号:23469254
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:24
- 大小:55.28KB
数据结构与算法实验报告线性表.docx
《数据结构与算法实验报告线性表.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告线性表.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构与算法实验报告线性表
一、实验目的
1、深刻理解线性结构的特点以及线性表的概念。
2、熟练掌握线性表的顺序存储结构、链式存储结构及基本运算算法的实现,特别是查找、插入和删除等算法。
二、实验环境
1)硬件:
每个学生需配备计算机一台,操作系统:
Windows2000/XP。
2)软件:
visualc++6.0。
三、实验题目和实验内容
实验题目:
线性表的顺序、链式表示及其应用
实验内容:
1、基本题:
实验2.1、实验2.2、实验2.4、实验2.7
2、附加题:
实验2.3、实验2.6(没做)
四、实验数据和实验结果
2.1
a,b,c,d,e
2.2
a,b,c,d,e
2.4
a,b,c,d,e
2.7
第一个多项式:
2x+6x^2-4x^3+3x^4第二个多项式1x-3x^2+6x^3-3x^4
五、附录(程序代码)
2.1
#include
#include
#defineMaxSize50
typedefstruct
{
chardata[MaxSize];
intlength;
}SqList;
voidCreateList(SqList*&L,chara[],intn)
{
inti;
L=(SqList*)malloc(sizeof(SqList));
for(i=0;i L->data[i]=a[i]; L->length=n; } voidInitList(SqList*&L) { L=(SqList*)malloc(sizeof(SqList)); L->length=0; } voidDestroyList(SqList*&L) { free(L); } intListEmpty(SqList*L) { return(L->length==0); } intListLength(SqList*L) { return(L->length); } voidDispList(SqList*L) { inti; for(i=0;i cout< cout< } charGetElem(SqList*L,inti,char&e) { if(i<1||i>L->length) return0; e=L->data[i-1]; returne; } intLocateElem(SqList*L,chare) { inti=0; while(i =e) i++; if(i>=L->length) return0; else returni+1; } intListInsert(SqList*&L,inti,chare) { intj; if(i<1||i>L->length+1) return0; i--; for(j=L->length;j>i;j--) L->data[j]=L->data[j-1]; L->data[i]=e; L->length++; return1; } intListDelete(SqList*&L,inti,char&e) { intj; if(i<1||i>L->length) return0; i--; e=L->data[i]; for(j=i;j L->length--; return1; } voidmain() { SqList*p; charb[10],e; intk; cout<<"元素个数: "; cin>>k; cout<<"输入元素: "; for(intm=0;m cin>>b[m]; InitList(p); CreateList(p,b,k); cout<<"输出顺序表: "; DispList(p); cout<<"顺序表长度是: "< if(ListEmpty(p)) cout<<"顺序表为空"< else cout<<"顺序表不为空"< cout<<"顺序表第3位元素是: "< cout<<"元素a的位置是: 第"< ListInsert(p,4,'f'); cout<<"在第4个元素上插入元素f: "; DispList(p); cout<<"删除顺序表第3个元素: "; ListDelete(p,3,e); DispList(p); DestroyList(p); } 2.2 #include #include typedefstructLNode { chardata; structLNode*next; }LinkList; voidCreateListR(LinkList*&L,chara[],intn) { LinkList*s,*r; inti; L=(LinkList*)malloc(sizeof(LinkList)); r=L; for(i=0;i { s=(LinkList*)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } voidInitList(LinkList*&L) { L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL; } voidDestroyList(LinkList*&L) { LinkList*pre=L,*p=pre->next; while(p) { free(pre); pre=p; p=pre->next; } free(pre); } intListEmpty(LinkList*L) { return(L->next==NULL); } intListLength(LinkList*L) { intn=0; LinkList*p=L; while(p->next) { n++; p=p->next; } return(n); } voidDispList(LinkList*L) { LinkList*p=L->next; while(p) { cout< p=p->next; } cout< } charGetElem(LinkList*L,inti,char&e) { intj=0; LinkList*p=L; while(j =NULL) { j++; p=p->next; } if(! p) return0; else { e=p->data; returne; } } intLocateElem(LinkList*L,chare) { inti=1; LinkList*p=L->next; while(p&&p->data! =e) { p=p->next; i++; } if(! p) return(0); else return(i); } intListInsert(LinkList*&L,inti,chare) { intj=0; LinkList*p=L,*s; while(j { j++; p=p->next; } if(! p) return0; else { s=(LinkList*)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return1; } } intListDelete(LinkList*&L,inti,char&e) { intj=0; LinkList*p=L,*q; while(j { j++; p=p->next; } if(! p) return0; else { q=p->next; if(! q) return0; e=q->data; p->next=q->next; free(q); return1; } } voidmain() { LinkList*h; charb[10],e; intk; cout<<"元素个数: "; cin>>k; cout<<"输入元素: "; for(intm=0;m cin>>b[m]; InitList(h); CreateListR(h,b,k); cout<<"输出单链表: "; DispList(h); cout<<"单链表长度是: "< if(ListEmpty(h)) cout<<"单链表为空"< else cout<<"单链表不为空"< cout<<"单链表第3位元素是: "< cout<<"元素a的位置是: 第"< ListInsert(h,4,'f'); cout<<"在第4个元素上插入元素f: "; DispList(h); cout<<"删除单链表第3个元素: "; ListDelete(h,3,e); DispList(h); DestroyList(h); } 2.4 #include #include typedefstructLNode { chardata; structLNode*next; }LinkList; voidCreateListR(LinkList*&L,chara[],intn) { LinkList*s,*r; inti; L=(LinkList*)malloc(sizeof(LinkList)); r=L; for(i=0;i { s=(LinkList*)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=L; } voidInitList(LinkList*&L) { L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL; } voidDestroyList(LinkList*&L) { LinkList*pre=L->next,*p=pre->next; L->next=NULL; while(p) { free(pre); pre=p; p=pre->next; } free(pre); } intListEmpty(LinkList*L) { return(L->next==NULL); } intListLength(LinkList*L) { intn=0; LinkList*p=L; while(p->next! =L&&p->next) { n++; p=p->next; } return(n); } voidDispList(LinkList*L) { LinkList*p=L->next; while(p! =L&&p) { cout< p=p->next; } cout< } charGetElem(LinkList*L,inti,char&e) { intj=1; LinkList*p=L->next; while(j =L&&p) { j++; p=p->next; } if(! p) return0; else { e=p->data; returne; } } intLocateElem(LinkList*L,chare) { inti=1; LinkList*p=L->next; while(p! =L&&p->data! =e&&p) { p=p->next; i++; } if(! p) return(0); else return(i); } intListInsert(LinkList*&L,inti,chare) { intj=1; LinkList*p=L->next,*s; while(j =L) { j++; p=p->next; } if(! p) return0; else { s=(LinkList*)malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return1; } } intListDelete(LinkList*&L,inti,char&e) { intj=1; LinkList*p=L->next,*q; while(j =L) { j++; p=p->next; } if(! p) return0; else { q=p->next; if(! q||q==L->next) return0; e=q->data; p->next=q->next; free(q); return1; } } voidmain() { LinkList*h; charb[10],e; intk; cout<<"元素个数: "; cin>>k; cout<<"输入元素: "; for(intm=0;m cin>>b[m]; InitList(h); CreateListR(h,b,k); cout<<"输出循环单链表: "; DispList(h); cout<<"循环单链表长度是: "< if(ListEmpty(h)) cout<<"循环单链表为空"< else cout<<"循环单链表不为空"< cout<<"循环单链表第3位元素是: "< cout<<"元素a的位置是: 第"< ListInsert(h,4,'f'); cout<<"在第4个元素上插入元素f: "; DispList(h); cout<<"删除循环单链表第3个元素: "; ListDelete(h,3,e); DispList(h); DestroyList(h); } 2.7 #include #include typedefstructpolynomial { intcoef;//系数 intindex;//指数 structpolynomial*next; }LinkList; voidCreateList(LinkList*&L,intn) { LinkList*s,*r; inti; L=(LinkList*)malloc(sizeof(LinkList)); r=L; for(i=0;i { s=(LinkList*)malloc(sizeof(LinkList)); cout<<"依次输入多项式系数和指数: "; cin>>s->coef>>s->index; s->next=NULL; r->next=s; r=s; } } voidInitList(LinkList*&L) { L=(LinkList*)malloc(sizeof(LinkList)); L->next=NULL; } voidAddList(LinkList*&list1,LinkList*&list2,intm,intn) { LinkList*s,*r,*t; inti; s=list1->next; r=list2->next; t=list1; for(i=0;i { if(s==NULL) { s=list1->next; t=list1; } while(s! =NULL) { if(s->index! =r->index) { s=s->next; t=t->next; } elsebreak; } if(! s) { s=(LinkList*)malloc(sizeof(LinkList)); s->coef=r->coef; s->index=r->index; s->next=NULL; t->next=s; s=s->next; r=r->next; continue; } else { if(s->index==r->index) s->coef=s->coef+r->coef; if(s->coef==0) { LinkList*temp1; temp1=s; s=s->next; t->next=s; deletetemp1; } } r=r->next; s=NULL; } cout<<"多项式相加的结果是: "; list1=list1->next; while(list1) { cout< if(list1->next! =NULL) cout<<"+"; list1=list1->next; } } voidDispList(LinkList*L) { L=L->next; while(L) { cout< if(L->next! =NULL) if(L->next->coef>0) cout<<"+"; L=L->next; } } voidmain() { LinkList*list1,*list2; InitList(list1); InitList(list2); intm,n; cout<<"请输入第一个多项式的项数: "; cin>>m; CreateList(list1,m); cout<<"多项式表示是: "; DispList(list1); cout< cout<<"请输入第二个多项式的项数: "; cin>>n; CreateList(list2,n); cout<<"多项式表示是: "; DispList(list2); cout< AddList(list1,list2,m,n); cout< }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实验 报告 线性