数据结构实验报告

更新时间: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 #include #include typedef struct student {

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 #include #include #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)调试记录

({{[}]})

本文来源:https://www.bwwdw.com/article/hkiw.html

Top