南昌大学数据结构实验报告免费下载.doc

上传人:laozhun 文档编号:3429503 上传时间:2023-03-13 格式:DOC 页数:34 大小:332.50KB
返回 下载 相关 举报
南昌大学数据结构实验报告免费下载.doc_第1页
第1页 / 共34页
南昌大学数据结构实验报告免费下载.doc_第2页
第2页 / 共34页
南昌大学数据结构实验报告免费下载.doc_第3页
第3页 / 共34页
南昌大学数据结构实验报告免费下载.doc_第4页
第4页 / 共34页
南昌大学数据结构实验报告免费下载.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《南昌大学数据结构实验报告免费下载.doc》由会员分享,可在线阅读,更多相关《南昌大学数据结构实验报告免费下载.doc(34页珍藏版)》请在三一办公上搜索。

1、计算机系数据结构实验报告(1)姓名: 学号: 专业班级: 实验目的:帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。问题描述:1、 构造一个空的线性表L。2、 在线性表L的第i个元素之前插入新的元素e;3、 在线性表L中删除第i个元素,并用e返回其值。实验要求:1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。2、 在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。 算法分析:#include#include#includeusing namespace std;#defi

2、ne LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef structint *elem;int length;int listsize;SqList;int InitList_Sq(SqList &L)L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int);if(!L.elem)return(0);L.length=0;L.listsize=LIST_INIT_SIZE;return(1);int ListCreat_Sq(SqList &L,int n,int a)int i;for(i=0;in;i+

3、)L.elemi=ai;L.length=n;return (1);int ListInsert_Sq(SqList &L,int i,int e)int *p;int *q;int *newbase;void ListPrint_Sq(SqList &L);if(iL.length+1)coutdata error!=L.listsize)newbase=(int *)malloc(L.listsize+LISTINCREMENT)*sizeof(int);if(!newbase)couterror!=q;-p)*(p+1)=*p;*q=e;+L.length;cout insert ord

4、er:endl;ListPrint_Sq(L);return(2);int ListDelete_Sq(SqList &L,int i,int e)int *p;int *q;int j;void ListPrint_Sq(SqList &L);if(iL.length)coutdata error!endl;return(0);p=&(L.elemi-1);e=*p;q=L.elem+L.length-1;for(+p;p=q;+p)*(p-1)=*p;L.length-;cout deleted order:endl;ListPrint_Sq(L);return(1);void ListP

5、rint_Sq(SqList &L)int i;for(i=0;iL.length;i+)coutsetw(5)L.elemi;coutendl;int main()SqList L;int e=0,i;int a8;int insert_position=0;int insert_number=0;int delete_position=0;if(InitList_Sq(L)=1)coutyes!endl;elsecoutsorry!endl;coutinput 8 numbers initialize the lianbiao:endl;for(i=0;iai;ListCreat_Sq(L

6、,8,a);coutthe original order:endl;ListPrint_Sq(L);coutinput the insert number insert_number;coutinput the insert position insert_position;ListInsert_Sq(L,insert_position,insert_number);coutinput the delete positiondelete_position;ListDelete_Sq(L,delete_position,e);(2).链表实现线性表的建立、插入和删除操作程序:#include#i

7、nclude#includeusing namespace std;typedef struct LNodeint data;struct LNode *next;LNode, *LinkList;int ListCreate_L(LinkList &L,int n)void ListPrint_L(LinkList &L);int i; LinkList p;L=(LinkList)malloc(sizeof(LNode);L-next=NULL;for(i=n;i0;-i)p=(LinkList)malloc(sizeof(LNode);cinp-data;p-next=L-next;L-

8、next=p;coutthe original order:endl;ListPrint_L(L);return(1);int ListInsert_L(LinkList &L,int i,int e)LinkList p=L;LinkList s;int j=0;void ListPrint_L(LinkList &L);while(p&jnext;+j;if(!p|ji-1)coutdata error!data=e;s-next=p-next;p-next=s;cout inserted order:next&jnext;+j;if(!(p-next)|ji-1)coutdata err

9、or!next;p-next=q-next;e=q-data;coutdeleted order:next;while(p)coutsetw(5)data;p=p-next;coutendl;int main()LinkList L;int number;int e;int insert_position=0;int insert_number=0;int delete_position=0;coutinput the number of node that you want to create:number;coutinput the reversed data to inliliaze t

10、he lianbiao:(按逆序输入数据初始化链表)endl;ListCreate_L(L,number);coutinput the insert numberinsert_number;coutinput the insert position.insert_position;ListInsert_L(L,insert_position,insert_number);coutinput the delete positiondelete_position;ListDelete_L(L,delete_position,e);实验内容和过程:实验结果:总结和感想:阅读完删除本文本框要求:根据本

11、格式填写实验报告,标题用黑小四,正文字体用五号字体,Word文本以“数据结构实验(1)_学号_姓名”命名。实验目的:深入了解栈和队列的特性,学会在实际问题下灵活运用它们。问题描述:表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。设计并演示用算符优先级对算术表达式的求解过程。实验要求:1、算法优先级别如下:+, -, *, /, (, ), #+ , , , , , ,- , , , , , ,* , , , , , ,/ , , , , , ,( , , , , , , , , , , ,# , , , , , , =2、以字符序列的形式从终端输入语法正确、不含变量的

12、算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。文法是一个四元算法分析:实验内容和过程:#include#include#includeusing namespace std;char a7=+,-,*,/,(,),#;char b77=, , , , ,=S.stacksize)S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char);if(!S.base)return 0; S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*

13、S.top+ =e;return 1;char Pop(SqStack &S)char e;if(S.top=S.base)return 0;e= * -S.top;return e;int In(char c)int i;for(i=0;i=6;i+)if(ai=c)return 1;return 0;char Precede(char c1,char c2)int i=0;int j=0;while(ai!=c1)i+;while(aj!=c2)j+;return bij;char Operate(char x,char c,char y)int i=0;int m,n;char d;m=

14、x-0;n=y-0;while(c!=ai)i+;switch(ai)case +:d=(m+n)+0;break;case -:d=(m-n)+0;break;case *:d=m*n+0;break;case /:d=m/n+0;break;return d;int main()SqStack OPTR,OPND;char c;char theta;char x1,x2;InitStack(OPTR);Push(OPTR,#);InitStack(OPND);c=cin.get();while(c!=#|GetTop(OPTR)!=#)if(!In(c)Push(OPND,c);c=cin

15、.get();elseswitch(Precede(GetTop(OPTR),c)case :theta=Pop(OPTR);x2=Pop(OPND);x1=Pop(OPND);Push(OPND,Operate(x1,theta,x2);break;cout(int(GetTop(OPND)-0)endl;实验结果:总结和感想:虽然书上有算法,但是自己真正去编写的时候才发现其实还是有难度的,关键有一个ASCII码的转换问题,什么时候变整型,什么时候变字符型符合条件。实验目的:深入研究数组的存储表示和实现技术,着重掌握对稀疏矩阵的表示方法及其运算的实现。问题描述:稀疏矩阵是指那些多数元素为零的

16、矩阵。利用稀疏特点进行存储和计算可以大大节省存储空间,提高效率。通过对稀疏矩阵的存储表示,实现矩阵的基本操作。实验要求:1、 要求矩阵的输入形式采用三元组表示,以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵。2、 设计矩阵的逆置算法,实现矩阵的逆置。3、 实现两个稀疏矩阵的相加、相减和相乘等运算。4、 要求运算结果的矩阵则以通常的阵列形式出现。文法是一个四元实验内容和过程:输入数据:2 1 00 0 00 0 32 0 01 0 00 0 3-12 1 00 0 00 0 30 0 00 0 00 0 2+=2 1 00 0 00 0 52 1 00 0 30 00 00 2+=0 00 6

17、源代码:#include #include using namespace std; const int MAXSIZE=12500; const int MAXRC=10; typedef struct int i,j; int e; Triple; typedef struct Triple dataMAXSIZE+1; int mu,nu,tu; TSMatrix; typedef struct Triple dataMAXSIZE+2; int rposMAXRC+1; int mu,nu,tu; RLSMatrix; template bool InPutTSMatrix(P & T

18、,int y) cout输?入?矩?阵的?行D列D非?零?元a个?数y:T.muT.nuT.tu; cout输?入?非?零?元a的?位?置?和值:endl; int k=1; for(;kT.datak.iT.datak.jT.datak.e; return true; template bool OutPutSMatrix(P T) int m,n,k=1; for(m=0;mT.mu;m+) for(n=0;nT.nu;n+) if(T.datak.i-1)=m&(T.datak.j-1)=n) cout.width(4); coutT.datak+.e; else cout.width(

19、4); cout0; coutendl; return true; bool TransposeSMatrix( ) TSMatrix M,T; /定义?预转aa置?的?矩?阵 InPutTSMatrix(M, 0); /输?入?矩?阵 int numMAXRC+1; int cpotMAXRC+1; / 构11建辅助数yy组 int q,p,t; T.tu=M.tu; T.mu=M.nu; T.nu=M.mu; if(T.tu) for(int col=1;col=M.nu;col+) numcol=0; for(t=1;t=M.tu;t+) +numM.datat.j; cpot1=1;

20、for(int i=2;i=M.nu;i+) cpoti=cpoti-1+numi-1; / 求出?每?一?列DD中DD非?零?元aa素?在三yy元aa组中DD出?现?的?位?置? for(p=1;p=M.tu;p+) int col=M.datap.j; q=cpotcol; T.dataq.i=col; T.dataq.j=M.datap.i; T.dataq.e=M.datap.e; +cpotcol; cout输?入?矩?阵的?转a置?矩?阵为aendl; OutPutSMatrix(T); return true; bool Count(RLSMatrix &T) int numMA

21、XRC+1; int col;for(int col=1;col=T.mu;col+) numcol=0; for(col=1;col=T.tu;col+) +numT.datacol.i; T.rpos1=1; for(int i=2;i=T.mu;i+) T.rposi=T.rposi-1+numi-1; return true; bool MultSMatrix ( ) RLSMatrix M,N,Q; InPutTSMatrix(M,1); InPutTSMatrix(N,1); Count(M); Count(N); if(M.nu!=N.mu) return false; Q.mu

22、=M.mu; Q.nu=N.nu; Q.tu=0; / Q初?始?化 int ctempMAXRC+1; int arow,tp,p,brow,t,q,ccol; if(M.tu*N.tu) for( arow=1;arow=M.mu;arow+) /memset(ctemp,0,N.nu); for(int x=1;x=N.nu;x+) ctempx=0; Q.rposarow=Q.tu+1; if(arowM.mu) tp=M.rposarow+1; else tp=M.tu+1; for(p=M.rposarow;ptp;p+) brow=M.datap.j; if(browN.mu)

23、t=N.rposbrow+1; else t=N.tu+1; for(q=N.rposbrow;qt;q+) ccol=N.dataq.j; ctempccol += M.datap.e*N.dataq.e; for(ccol=1;ccolMAXSIZE) return false; Q.dataQ.tu.e=ctempccol; Q.dataQ.tu.i=arow; Q.dataQ.tu.j=ccol; OutPutSMatrix(Q); return true; bool AddSMatrix() TSMatrix M,N,Q;InPutTSMatrix(M, 2);InPutTSMatr

24、ix(N, 2);if(M.mu=0)|(M.nu=0)|(M.tu=0)|(N.mu=0)|(N.nu=0)|(N.tu=0) return 0; if(M.mu!=N.mu|M.nu!=N.nu) return 0; Q.mu=M.mu; Q.nu=M.nu; Q.tu=0; int x=0,y=0; for(int i=1;i=Q.mu;i+) for(int j=1;j=Q.nu;j+) for(int p=1;p=M.tu;p+) if(i=M.datap.i)&(j=M.datap.j) x=M.datap.e; break; else x=0; /for p for(int q=

25、1;q=N.tu;q+) if(i=N.dataq.i)&(j=N.dataq.j) y=N.dataq.e; break; else y=0; /for q if(x+y)!=0) Q.dataQ.tu+1.i=i; Q.dataQ.tu+1.j=j; Q.dataQ.tu+1.e=x+y; Q.tu+; /if /for j /for i OutPutSMatrix(Q); return 1;int main() cout请?选?择?要a进?行D的?操作endl; cout1:矩?阵的?转a置?endl; cout2:矩?阵的?加法endl; cout3:矩?阵的?乘?法endl; cou

26、t4:退?出?程序endl; char c=getchar(); if(c=1) TransposeSMatrix( ); else if(c=2) AddSMatrix(); else if(c=3) MultSMatrix (); else exit(0); /退?出? return 0;实验结果:总结和感想:蛮大难度的,代码量比较长,感觉还有许多都不怎么懂,照书上的码下来的,还是要多练习才行。实验目的:树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。问题描述:首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。其次,

27、以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。-+/a*b-efCd如算术表达式:a+b*(c-d)-e/f实验要求:1、 如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算a) 统计叶子结点的个数。b) 求二叉树的深度。2、 十进制的四则运算的计算器可以接收用户来自键盘的输入。3、 由输入的表达式字符串动态生成算术表达式所对应的二叉树。4、 自动完成求值运算和输出结果。算法分析:#include#include#include#includeusing namespace std;#define STACK_INIT_SIZE 100#define STACK

28、INCREASE 10typedef char TElemType; /表示?处|理的?数y据Y类型,?这a里?是?字?符?typedef struct BiTNode /二t叉?树中D节点?的?数y据Y结构1,?左右孩子用?指?针?表示?TElemType data;struct BiTNode * lchild,* rchild;BiNode,* BiTree;typedef BiTree SElemType;typedef BiTree QElemType;typedef struct SqStack /栈?的?定义?,?是?一?个?二t叉?树组成的?栈?,?每?个?成员是?一?个?指?

29、向二t叉?树中D结点?的?指?针? SElemType *base;SElemType *top;int stacksize;SqStack;/*=栈?-ADT栈?的?实现?,?包括初?始?化,?Push,?Pop其?实这a部?分?代码?可以?不?需要a看,?无T非?是?实现?了?栈?的?基本?操作=*/void InitStack(SqStack &S)S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);S.top=S.base;S.stacksize=STACK_INIT_SIZE;/InitStackvoid Push

30、(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREASE)*sizeof(SElemType);if(!S.base)exit(1);S.top=S.base+S.stacksize;/?貌2似?多余?S.stacksize+=STACKINCREASE;*S.top+=e;int Pop(SqStack &S,SElemType &e)if(S.base=S.top)return -1;e=*-S.top;return 0;

31、BiTree PreCreateBiTree()BiTree p;char ch;ch=getchar();ch=getchar(); /此?处|读两?次?的?原-因是?,?每?隔?一?个?输?入?符?号?之?间?,?有D一?个?空?格?,?需要a多读一?次?把?空?格?跳?过y去if(ch=#) return NULL;p=(BiTree)malloc(sizeof(BiNode);p-data=ch;p-lchild=PreCreateBiTree();p-rchild=PreCreateBiTree();return p;/PreCreateBiTreevoid Visit(TElemT

32、ype ch)printf(%c,ch);/Visit/用?来打印?data。int PreRead(BiTree bt)if(!bt)return 0;Visit(bt-data);PreRead(bt-lchild);PreRead(bt-rchild);return 0;/PreRead/先序遍历,?先将?data打印?,?再递Y归调用?。int InRead(BiTree bt)if(!bt)return 0;InRead(bt-lchild);Visit(bt-data);InRead(bt-rchild);return 0;/InRead/中D序遍历,?先递Y归调用?左孩子,?再打印?data,?再调用?右孩子。int PostRead(BiTree bt)if(!bt)return

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号