数据结构实验报告
更新时间:2024-01-31 11:06:01 阅读量: 教育文库 文档下载
本科生实验报告
实验课程 数据结构(C语言版) 学院名称 成都理工大学 专业名称 测控技术与仪器 学生姓名 学生学号 指导教师 实验地点 实验成绩
二〇一五年 五 月二〇一五 年 七月
实验一:成绩的顺序表实现
(1)问题描述
建立自己的成绩表,利用顺序表及链表两种方式实现,要求实现的基本操作有:插入新成绩,删除成绩,寻找指定科目成绩及输出功能。
(2)数据结构设计
a.逻辑结构设计
以链表形式存储,链表头存姓名、学号,用结构体No1实现,其指针指向存科目、成绩的结构体No2,而No2指向No2类型,以实现多科目存储。 b.物理逻辑设计
链式存储方式
(3)算法设计
a.算法列表 序号 1 2 名称 create insert 函数表示符 create(Sqlist *m,int n) 操作说明 创建成绩表 insert(NAME1 *head,int n,char 插入成绩 z[10],double gra) 3 del del(NAME1 *head,char sm[10]) 删除成绩 4 dislayelement dislayelement(NAME1 *head,char s[10]) 查询成绩 b.算法描述
本算法中建立了一个数组结构体,结构体中包括课程的成绩和课程的名称。创建成绩时,依次输入n科课程的成绩和名称,并存储在数组结构体中;插入成
绩是增加一个存储空间,存储新插入的成绩;删除成绩是先找到该科目的位置,然后将该位置其后的元素都向前移一位,删除该元素,即删除该科目及成绩;查询成绩是找到该科目的位置,并将它的成绩和名称输出来。
(4)源程序清单 #include
char name[10]; char num[10]; struct score *next;
}NAME1;
typedef struct score {
char sub[10]; double grade; struct score *next;
}NAME2;
NAME1 *creat1() {
NAME1 *head1;
NAME2 *head2,*p,*s;
char gra[10],k[3]; int key=1,n,i;
head1=(NAME1*)malloc(sizeof(NAME1)); printf(\输入姓名:\gets(head1->name); printf(\输入学号:\gets(head1->num);
head2=(NAME2*)malloc(sizeof(NAME2)); p=head2; while(key) {
printf(\需要创建节点输入1,否则输入0:\gets(k); n=atoi(k); if(n!=0) {
s=(NAME2*)malloc(sizeof(NAME2));
printf(\输入科目:\gets(gra); i=0;
while(gra[i]!=NULL)
}
}
}
{ }
s->sub[i]=NULL; printf(\输入成绩:\gets(gra);
s->grade=atof(gra); p->next=s; p=s;
s->sub[i]=gra[i]; i++;
else key=0;
head2=head2->next; p->next=NULL; head1->next=head2; return head1;
void display(NAME1 *head) {
NAME1 *p1; NAME2 *p2;
}
int i=0; p1=head;
printf(\p2=head->next; do{
for(i=0;p2->sub[i]!=NULL;) { }
printf(\printf(\p2=p2->next;
printf(\i++;
}while(p2!=NULL);
void insert(NAME1 *head,int n,char z[10],double gra) {
NAME2 *s,*p; int i;
s=(NAME2*)malloc(sizeof(NAME2)); s->grade=gra; strcpy(s->sub,z);
}
if(n==1) { } else { }
p=head->next; for(i=2;i p=p->next; s->next=head->next; head->next=s; if(p->next==NULL) { } else { } s->next=p->next; p->next=s; p->next=s; s->next=NULL; void dislayelement(NAME1 *head,char s[10]) { } void del(NAME1 *head,char sm[10]) } else p2=p2->next; p1=head; p2=p1->next; while(p2!=NULL) { if(strcmp(p2->sub,s)==0) { puts(p2->sub); printf(\p2=p2->next; } NAME1 *p1; NAME2 *p2; { NAME2 *p,*t; p=(NAME2*)malloc(sizeof(NAME2)); t=(NAME2*)malloc(sizeof(NAME2)); t=head->next; if(strcmp(t->sub,sm)==0) else { p=t; t=t->next; while(t->next!=NULL) { if(strcmp(t->sub,sm)==0) { } else { p=p->next; t=t->next; p->next=t->next; t=NULL; break; head->next=t->next; } } } } if(t!=NULL&&strcmp(t->sub,sm)==0) p->next=NULL; int main(void) { display(head1); //输出功能 printf(\输入插入位置\\nt=\printf(\ head1=creat1(); //输入功能 int t; double grade; char sub[10]; NAME1 *head1; scanf(\if(t!=0) { printf(\输入插入的科目:\scanf(\ printf(\输入插入的成绩:\scanf(\insert(head1,t,sub,grade); //插入功能 } display(head1); //输出功能 printf(\输入删除的科目:\scanf(\del(head1,sub); printf(\ //删除功能 display(head1); //输出功能 printf(\ printf(\输入输出的科目名:\scanf(\ dislayelement(head1,sub); display(head1); } return 0; //输出特定科目功能 (5)调试记录 输入姓名:ma 输入学号:2 需要创建节点输入1,否则输入0:1 输入科目:a 输入成绩:45 需要创建节点输入1,否则输入0:1 输入科目:b 输入成绩:46 需要创建节点输入1,否则输入0:1 输入科目:c 输入成绩:56 需要创建节点输入1,否则输入0:0 ma 2 a 45.000000 b 46.000000 c 56.000000 输入插入位置 t=1 输入插入的科目:d 输入插入的成绩:54 ma 2 d 54.000000 a 45.000000 b 46.000000 c 56.000000 输入删除的科目:c ma 2 d 54.000000 a 45.000000 b 46.000000 输入输出的科目名:a a 45.000000 ma 2 d 54.000000 a 45.000000 b 46.000000 Press any key to continue (6)运行说明 运行程序时根据弹出的提示分别执行不同的功能,插入,删除,查询。 实验二:括号匹配 (1)问题描述 以文件的形式输入一串字符和括号,判断括号是否匹配,并以特殊符号标识出不匹配的括号。 (2)数据结构设计 a.逻辑结构设计 线性结构(栈) b.物理逻辑设计 顺序存储方式(数组) (3)算法设计 a.算法列表 序号 1 名称 initstack 函数表示符 initstack(D *S) 2 3 4 5 gettop push pop judge gettop(D *S) push(D *S,char e) pop(D *S) judge(D *S) 取栈顶元素 入栈 出栈 判断栈是否为空 操作说明 创建一个空栈 b.算法描述 用栈的方式实现括号匹配,当遇到左括号时,将左括号入栈,当遇到右括号时,先取栈顶元素看是否与右括号匹配,如果匹配就让栈顶元素出栈,如果不匹配就输出这是第几个括号来标识错误。 (4)源程序清单 #include typedef char SElemType; #define SIZE 100 #define STACKINCREMENT 20 typedef char SElemType; typedef int size; typedef struct { }D; initstack(D *S) { } char gettop(D *S) { char e; e=*(S->top-1); return e; S->size=SIZE; return NULL; S->base=(SElemType *)malloc(SIZE * sizeof(SElemType)); S->top=S->base; SElemType *base; SElemType *top; int size; } void push(D *S,char e) { } void pop(D *S) { } int judge(D *S) { } int main(void) { initstack(&s); in=fopen(\if(in==NULL) char a[50],*p,q,m; D s; int t=1,i=0,n,b; FILE *in,*out;//********************* if(S->base==S->top) else return 1; return 0; S->top--; if(!(S->top-S->base>=S->size)) S->size=S->size+20; *S->top=e; S->top++; { } out=fopen(\if(out==NULL) { } while(!feof(in)) { } printf(\n=i-1;// p=a;//*******p指针指向数组a的首地址 a[i]=fgetc(in); printf(\i++; printf(\exit(0); printf(\exit(0); for(i=0;i q=a[i]; if((q=='(')||(q=='{')||(q=='[')) push(&s,q); else if(q==')') { printf(\m=gettop(&s); printf(\ } if(m=='(') else b=i; t=0; pop(&s); else if(q==']') { } else if(q=='}') { } printf(\m=gettop(&s); printf(\if(m=='{') else b=i; t=0; pop(&s); printf(\m=gettop(&s); printf(\if(m=='[') else b=i; t=0; pop(&s); }//**************************************************** if(t==0) printf(\ if(t==0) printf(\匹配错误.\\n\ else if(judge(&s)==0) else printf(\printf(\ if(t==1) { } else { for(i=0;i fputc(a[i],out); for(i=b;i { if(a[i]=='('||a[i]==')'||a[i]=='['||a[i]==']'||a[i]=='{'||a[i]=='}') } { fputc('_',out); fputc(a[i],out); } else } fputc(a[i],out); } return(0); fclose(in); fclose(out); printf(\ (5)调试记录 ({{[}]})
正在阅读:
数据结构实验报告01-31
国际贸易实务名词解释和简答题汇编05-18
2022MPACC会计硕士考研必须知道的内容,会计硕士mpacc论坛精选04-22
国内外新能源产业发展现状及趋势分析01-14
初中校本教研计划12-30
云计算普及培训班考试试题- 答案版10-14
三角形的三条边的关系05-22
台海局势论文04-25
浅谈开发项目跟踪审计工作体会12-10
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 实验
- 报告