当前位置:文档之家› 数据结构实验答案1

数据结构实验答案1

重庆文理学院软件工程学院实验报告册专业:_____软件工程__ _班级:_____软件工程2班__ _学号:_____201258014054 ___姓名:_____周贵宇___________课程名称:___ 数据结构 _指导教师:_____胡章平__________2013年 06 月 25 日{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/}SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);void main(){ SeqList *l;int p,q,r;int i;l=(SeqList*)malloc(sizeof(SeqList));printf("请输入线性表的长度:");scanf("%d",&r);l->last = r-1;printf("请输入线性表的各元素值:\n");for(i=0; i<=l->last; i++){scanf("%d",&l->elem[i]);}px(l,i);printf("请输入要插入的值:\n");scanf("%d",&l->elem[i]);i++;px(l,i);l->last++;for(i=0; i<=l->last; i++){ printf("%d ",l->elem[i]);}printf("\n");}void px(SeqList *A,int j){ int i,temp,k;for(i=0;i<j;i++){ for(k=0;k<j-1;k++){if(A->elem[i]<A->elem[k]){temp=A->elem[i];A->elem[i]=A->elem[k];A->elem[k]=temp;}}}}2.#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/}SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);int DelList(SeqList *L,int i,SeqList *e,int j)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。

i 的合法取值为1≤i≤st+1 */{ int k,a,b,c;if((i<1)||(i>L->last+2)){ printf("删除位置不合法!");return(ERROR);}if(j>L->last-i){ printf("删除位置不合法!");return(ERROR);}for(b=0,a=i-1;a<i+j-1;b++,a++){ e->elem[b]=L->elem[a];}e->last=b; /* 将删除的元素存放到e所指向的变量中*/for(k=i;k+j-1<=L->last;k++){ L->elem[k-1]=L->elem[k+j-1]; }/*将后面的元素依次前移*/L->last=L->last-j;printf("删除的元素值为:");for(c=0;c<b;c++){ printf("%d ",e->elem[c]);}printf("\n");return(OK);}void main(){ SeqList *l,*q;int p,r;int i,j,m;l = (SeqList*)malloc(sizeof(SeqList));q = (SeqList*)malloc(sizeof(SeqList));printf("请输入线性表的长度:");scanf("%d",&r);l->last = r-1;printf("请输入线性表的各元素值:\n");for(i=0; i<=l->last; i++){ scanf("%d",&l->elem[i]);}px(l,i);for(i=0;i<=r-1;i++){printf("%d ",l->elem[i]);}printf("\n");printf("请输入要删除的元素位置(位置+个数):\n"); scanf("%d%d",&p,&j);m=DelList(l,p,q,j);if(m==0){printf("无法删除");exit(0);}else if(m==1){ printf("线性表内余下元素为:\n");for(i=0;i<=r-j-1;i++){printf("%d ",l->elem[i]);}printf("\n");}}void px(SeqList *A,int j){ int i,temp,k;for(i=0;i<j;i++){ for(k=0;k<j-1;k++){if(A->elem[i]<A->elem[k]){temp=A->elem[i];A->elem[i]=A->elem[k];A->elem[k]=temp;}}}printf("排序完成!");}3.#include <stdio.h>#include <stdlib.h>#include <string.h>/*#define ElemType char*/typedef struct Node /*结点类型定义*/{ int num;char name[10];int age;struct Node * next;}Node, *LinkList; /* LinkList为结构指针类型*/LinkList CreateFromTail()/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/{ LinkList L;Node *r, *s;int a;char b[10];int c;int flag =1; /*设置一个标志,初值为1,当输入"-1"时,flag 为0,建表结束*/L=(Node * )malloc(sizeof(Node));L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*//*循环输入表中元素值,将建立新结点s插入表尾*/printf("输入学生的信息:\n");printf("学号姓名年龄\n");while(flag){ scanf("%d",&a);if(a==-1)flag=0;else{ scanf("%s%d",b,&c);s=(Node*)malloc(sizeof(Node));s->num=a;strcpy(s->name,b);s->age=c;r->next=s;r=s;}} r->next=NULL;return L;}void ReverseList(LinkList L){ Node *p,*q;p=L->next;L->next=NULL;while(p!=NULL){ q=p->next; /*q指针保留p->next得值*/ p->next=L->next;L->next=p; /*将p结点头插入到单链表L中*/p=q; /*p指向下一个要插入的结点*/ }}void main(){ LinkList l;Node *p;printf("请输入链表数据,以-1结束!\n");l = CreateFromTail();printf("输入的单链表为:\n");p = l->next;while(p!=NULL){ printf("%d %s %d\n",p->num,p->name,p->age);p=p->next;}ReverseList(l);printf("逆置后的单链表为:\n");p = l->next;while(p!=NULL){ printf("%d %s %d\n",p->num,p->name,p->age);p=p->next;}}实验结果及分析1.实验结果:实验分析:我做了三次实验,分别插入数列前,中,后的数字,实验证明代码没有错误,能正常运行、排序、输出。

存在的问题:我不明白为什么我写的是降序排序,计算机运行后就是升序排序了。

希望老师能帮我修改一下。

2.实验结果实验分析:我通过三次实验(正常删除、删除个数超出、删除位置不正确)证明代码的正确性。

相关主题