1、 float maxx; maxx=cour0.course_score; for(j=1; if(maxxcourj.course_score) maxx=courj.course_score;the maximum istmaxx min=courj.course_score;the minimize istmincourj.course_num;courj.course_name;courj.course_score;void output(course*cour,int i)courj.course_numtcourj.course_namettcourj.course_score#d
2、efine LIST_INIT_LIST 100#define LISTINCREMENT 10#define null 0 int *elem; int length; int listsize;Sqlist;int initSqlist(Sqlist &L) L.elem=(int *)malloc(LIST_INIT_LIST*sizeof(int); if(!L.elem) return null; L.length=0; L.listsize=LIST_INIT_LIST; return 1;int inserSqlist(Sqlist &L,int i,int e) int j,*
3、newbase; if(iL.length+1) if(L.length=L.listsize) newbase=(int *)realloc(L.elem,(LIST_INIT_LIST+LISTINCREMENT)*sizeof(int);newbase) return null; L.elem=newbase; L.listsize+=LISTINCREMENT; for(j=L.length-1;j=i-1;j-) L.elemj+1=L.elemj; L.elemi-1=e; L.length+;int deletSqlist(Sqlist &L,int i,int &e) if(L
4、.length=0) e=L.elemi-1; for(j=i;=L.length-1; L.elemj-1=L.elemj; -L.length;void traverSqlist(Sqlist & int i; for(i=0;ii+) coutL.elemi Sqlist L; int i,j,n,k,e,g; initSqlist(L);please input how number you want:n;please input number: for(i=1;=n;e; inserSqlist(L,i,e); traverSqlist(L);please input which n
5、umber you want to delete:k; deletSqlist(L,k,g);4.运行结果见下图2.1. 图2.1 顺序表运行结果三、 实验心得本次试验,算是刚刚开始正面接触数据结构,感觉现在定义的结构体都好难,基本上都跟指针挂钩,有点不适应。刚开始都是照着书本打,可是这又有新问题了,主函数不会写,不知道从哪入手。看了看书,开始下手,各种错误,比如指针类型不能跟int数值类型相互赋值,还有一些丢了双引号等等,后来逐一排查错误后,又在主函数赋值i和调用函数的相应值之间出错,还有在traverSqlist函数中,把i=L.length-1写成inext=null; return H
6、;int inserLnode(Lnode *L,int i,int e) Lnode *p,*q; p=(Lnode *)malloc(sizeof(Lnode); p-data=e; q=L;i-1; q=q-next; if(ji&q-next!=null)next=q- q-next=p;int deletLnode(Lnode *L,int i,int & e=q-data; p=q-next=p-int travellLnode(Lnode *L) Lnode *q; while(q-data inserLnode(L,i,data);the num is: travellLnod
7、e(L);void hebingLnode(Lnode *La,Lnode *Lb) Lnode *Lc,*pa,*pb,*pc; pa=La- pb=Lb- Lc=pc=La; while(pa&pb) if(pa-=pb-data) pc-next=pa; pc=pa; pa=pa- else pc-next=pb; pc=pb; pb=pb-pa) pc-pb) pc- free(Lb); travellLnode(Lc); Lnode *L1; Lnode *L2; L1=initlist(); createLnode(L1); L2=initlist(); createLnode(L
8、2); hebingLnode(L1,L2); 4.实验结果如下图3.1。 图3.1实验结果 本次试验,依旧实在插入函数inserLnode的循环语句for(j=0;j+)的就ji-1输成了j pc=pa; pa=pa-没有弄的太明白,老是忘记这是个链表结构,还有头结点,而且没弄懂把Lc的指针直接指向La,老是感觉会破坏La的后面的数据,后来才明白,这是个链表结构,不是顺序表,这样做只是利用La的头结点,就不用再去创建一个头结点了。所以在后面也就不用free(La)了,最后一个错误就是在合并函数中将if(!,语句写成了if(!next=pa,这就是pa指针没了,还把pa指针赋值给pc,也就是空
9、值,以至于在输出时只输出La的值,后来也是看书找到了答案。实验四、栈的基本操作 1.掌握栈的抽象数据类型。 2.掌握实现栈的各种操作。 3.理解栈与递归的关系。 1.用C描述栈的美中操作在顺序栈上得实现。 2.将建栈、初始化栈、判断是否非栈、用堆栈设计一个八进制转换程序。#define STACK_INIT_SIZE 100#define STACKINCREAEMNT 10 int *base; int *top; int stacksize;Sqstack;struct initSqstack(Sqstack & L.base=(int *)malloc(STACK_INIT_SIZE*s
10、izeof(int); if(!L.base) return 0; L.top=L.base; L.stacksize=STACK_INIT_SIZE;int push(Sqstack &L,int e) if(L.top-L.base=L.stacksize) L.base=(int *)realloc(L.base,(STACK_INIT_SIZE+STACKINCREAEMNT)*sizeof(int); if(! return 0; L.top=L.base+L.stacksize; L.stacksize+=STACKINCREAEMNT; *L.top+=e;void pop(Sq
11、stack &L,int & if(L.base=L.top)this stack is empty! e=*-L.top;int main() int n,m; Sqstack L; initSqstack(L);input num you want to: while(n) push(L,n%8); n=n/8;它的八进制表示为: while(L.top!=L.base) pop(L,m);mint inserLinkQnode(LinkQnode &Q,int e) Qnode *p; p=(Qnode *)malloc(sizeof(Qnode);p) Q.rear- Q.rear=p
12、;int deletLinkQnode(LinkQnode &Q,int & if(Q.front=Q.rear) p=Q.front- e=p- return e;void travellLinkQnode(LinkQnode & Qnode *q; q=Q.front- do q=q- while(q!=Q.rear-next); int i,n,m,k,data; LinkQnode S; initLinkQnode(S);please input numninput what you wantn inserLinkQnode(S,data); travellLinkQnode(S);d
13、elete a numn deletLinkQnode(S,m); deletLinkQnode(S,k);4.实验结果如下图5.1。 图5.1 实验结果 这个实验真的很难做感觉,首先是不理解单链表到底是什么意思,就开始敲程序,结果错的乱七八糟,错误最多的还是在travellLink函数如何将这个链表的数据输出出来,刚开始我定义了一个指针p,就是在q=Q.front-next还是q=Q.front,错了好多次,就是因为不知道什么事头结点,还有就是把Q.front当成是这个链表的头结点,结果错了,才知道Q.front和Q.rear只是一个指向头结点的指针,而头结点另有所在。而后又在travell
14、Link函数的while(q!next)上绊了一大脚,依旧是不知道是应该是while(q-next),后来经过反反复复尝试加上看书本理解队列的头结点问题,在解开。最后,又在删除元素上出错了,原因是忘记了列队的只能从Q.front的那一边删除元素,后来终于全部运行出来。实验六、无头结点的循环链表 1.理解头结点的含义。 2.掌握循环链表的各种操作算法。 3.掌握无头节点循环链式存储结构的及基本操作,深入了解无头节点循环链式表的基本特征。以便在实际中灵活的运用它们。 1. 用C表述每种操作在链队列上的实现。 2. 将建立一个无头节点循环链式表,完成在这个链式表上每第三个数删掉数据,结果输出来。void inserQnode(Qnode *L,int i,int e) Qnode *p,*q;i-2;void deletQnode(Qnode *L) int e; p=L; p=p- q=p-e free(q);n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1