当前位置:文档之家› 学生成绩管理系统(数据结构C语言版源代码)

学生成绩管理系统(数据结构C语言版源代码)

少为失败找理由,多为成功找方法,大多数人想要改革这个世界,却不晓得即时从小事做起。#include

#include

#include

struct students{

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

struct students *next; /*用与构建连表指向下一结点*/

};

FILE *fp; /*定义全局变量fp*/

void Revisemenu();/*修改菜单*/

void Sortmenu();/*排序菜单*/

void menu();/*主菜单*/

void secret();/*安全验证*/

struct students * Input();/*新建学生信息*/

void fprint(struct students *head);/*将信息导入文件可追加*/

void fprint_(struct students *head);/*将信息导入文件并覆盖*/

void Browse(struct students *head);/*浏览全部学生信息*/

struct students * create(struct students *head

int *n);/*从tushu_list中读取数据构建链表*/

void FindofNum(struct students *head);/*按学号查询学生信息*/

void FindofNname(struct students *head);/*按姓名查询学生信息*/

void SortEnglish(struct students * head);/*按英语成绩排序*/

void SortJava(struct students * head);/*按Java成绩排序*/

void SortSjjg(struct students * head);/*按数据结构成绩排序*/

void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/

void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/

struct students * Delete(struct students * head

char m[15]);/*按学号删除学生成绩信息*/

struct students * Revise();/*修改学生信息(按编号修改)*/

/*主菜单*/

void menu()

{

printf("\n\n");

printf("***************************************************\n");

printf(" 学生成绩管理系统 \n");

printf("---------------------------------------------------\n");

printf(" 1-添加新同学 2-浏览学生信息 \n");

printf(" 3-按学号查询 4-按姓名查询 \n");

printf(" 5-按成绩排序 6-修改学生信息 \n");

printf(" 7-删除学生信息 0-退出系统 \n");

printf("---------------------------------------------------\n");

printf("___________________________________________________\n"); }

/*排序菜单*/

void Sortmenu()

{

printf("\n\n");

printf("***************************************************\n");

printf(" 按成绩排序 \n");

printf(" 1-大学英语 2-JAVA编程 \n");

printf(" 3-数据结构 4-数字逻辑电路 \n");

printf(" 5-计算机组成原理 0-返回上级菜单 \n");

printf("***************************************************\n"); }

/*修改菜单*/

void Revisemenu()

{

printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1--修改学生姓名 2--修改学生学号 \n"); printf(" 3--修改学生性别 4--修改英语成绩 \n"); printf(" 5--修改JAVA成绩 6--修改数据结构 \n"); printf(" 7--修改数字电路 8--修改计算计 \n");

printf(" 0--返回上级菜单 \n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); }

/*安全验证*/

void secret()

{

char a[20];

printf("**欢迎来到学生信息管理系统

进入系统前请先进行密码验证---");

printf(" ");

do{

gets(a); /*输入密码*/

system("cls"); /*调用库函数清屏*/

printf("对不起!您输入的密码有误

请重新输入---");

}while(strcmp(a

"0605")!=0); /*单一密码"0605"*/

system("cls");

}

/*新建学生信息*/

struct students * Input()

{

struct students *p1

*p2

*head; /*建立辅助结点及头结点*/

char Name;

int n=0

x;

printf("\n请按对应项输入学生信息以#结束:\n");

printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");

p1=(struct students *)malloc(sizeof(struct students));

head=p2=p1;

do{ /*使用do while语句输入学生信息*/

scanf("%s"

&p1->Name);

if(strcmp(p1->Name

"#")==0)break; /*判断结束符*/

else

scanf("%s%s%lf%lf%lf%lf%lf"

p1->Num

p1->Sex

&p1->English

&p1->Java

&p1->Sjjg

&p1->Szdl

&p1->Jsj);

Name='#';

p1=(struct students *)malloc(sizeof(struct students));

p2->next=p1;

p2=p1;

n++;

}while(1);

p1->next=NULL;

printf("学生信息输入结束!\n");

getchar();

printf("是否保存学生信息?(1.是/2.否):");

scanf("%d"

&x);

if(x==1)

fprint(head); /*调用函数保存至文件*/ else

printf("\n文件没有被保存!\n");

return head; /*返回头指针*/

}

/*将信息导入文件可追加*/

void fprint(struct students *head)

{

struct students *p1;

if((fp=fopen("students_list.txt"

"a"))==NULL)

{

printf("File open error!\n");

exit(0);

}

for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/

fprintf(fp

"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p1->Name

p1->Num

p1->Sex

p1->English

p1->Java

p1->Sjjg

p1->Szdl

p1->Jsj);/*将学生信息写入文件*/

fclose(fp); /*关闭文件*/

printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");

getchar();

}

/*将信息导入文件并覆盖*/

void fprint_(struct students *head)

{

struct students *p1;

if((fp=fopen("students_list.txt"

"w"))==NULL)

printf("File open error!\n");

exit(0);

}

for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/

fprintf(fp

"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p1->Name

p1->Num

p1->Sex

p1->English

p1->Java

p1->Sjjg

p1->Szdl

p1->Jsj);/*将学生信息写入文件*/

fclose(fp); /*关闭文件*/;

getchar();

}

/*浏览全部学生信息*/

void Browse(struct students *head)

{

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

if((fp=fopen("students_list.txt"

"a+"))==NULL)

{

printf("File open error!\n");

exit(0);

}

printf("-------------------------------------------------------------\n");

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(!feof(fp))/*读取并输出*/{

fscanf(fp

"%s%s%s%lf%lf%lf%lf%lf"

Name

Num

&English

&Java

&Sjjg

&Szdl

&Jsj);

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

Name

Num

Sex

English

Java

Sjjg

Szdl

Jsj);

};

if(fclose(fp))

{

printf("Can not close the file!\n");

exit(0);

}

}

/*从tushu_list中读取数据构建链表*/

struct students * create(struct students * head

int *n)

{

FILE *fp;

struct students*p

*p1

*p2;

if((fp=fopen("students_list.txt"

"a+"))==NULL)

{

printf("File open error!\n");

exit(0);

}

while(!feof(fp))

{

(*n)++;

p=(struct students *)malloc(sizeof(struct students));

fscanf(fp

"%s%s%s%lf%lf%lf%lf%lf"

p->Name

p->Num

p->Sex

&p->English

&p->Java

&p->Sjjg

&p->Szdl

&p->Jsj);

if(head==NULL)

{

head=p;

p1=p;

}

else

{

p1->next=p;

p2=p1;

p1=p;

}

}

p2->next=NULL;

free(p);

(*n)--;

fclose(fp);

return head;

}

/*按姓名查询学生信息*/

void FindofName(struct students *head) {

int i=0

n=0;

char b[20];

struct students *p;

head=create(head

&n);

p=head;

printf("\n请输入要查询的学生姓名:");

scanf("%s"

b);

while(p!=NULL){

if(strcmp(p->Name

b)==0){

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

i++;

}

p=p->next;

}

if(i==0)

printf("\n对不起!没有找到名为"%s"的学生信息!\n"

b);

}

/*按学号查询学生信息*/

void FindofNum(struct students *head)

{

int i=0

n;

char b[20];

struct students *p;

head=create(head

&n);

p=head;

printf("\n请输入要查询的学生学号:");

scanf("%s"

b);

while(p!=NULL){

if(strcmp(p->Num

b)==0){

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

i++;

}

p=p->next;

}

if(i==0)

printf("\n对不起!没有找到学号为"%s"学生信息!\n"

b);

}

/*按英语成绩排序*/

void SortEnglish(struct students * head)

{

struct students *p

*tail; /*定义中间变量*/

int n;

double English;

p=(struct students *)malloc(sizeof(struct students));

head=create(head

&n);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

English=p->English; /*将链表中第一个成绩赋给English*/

while(p!=NULL)

{

if((p->English)>English)/*比较*/

English=p->English;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->English==English){

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);/*浏览排序后的信息*/

printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");

return;

}

/*按JAVA成绩排序*/

void SortJava(struct students * head)

{

struct students *p

*tail; /*定义中间变量*/

int n;

double Java;

p=(struct students *)malloc(sizeof(struct students));

head=create(head

&n);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Java=p->Java; /*将链表中第一个成绩赋给Java*/

while(p!=NULL)

{

if((p->Java)>Java)/*比较*/

Java=p->Java;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Java==Java){

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Java==Java){ /*成绩相同时无需比较*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);/*浏览排序后的信息*/

printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");

return;

}

/*按数据结构排序*/

void SortSjjg(struct students * head)

{

struct students *p

*tail; /*定义中间变量*/

int n;

double Sjjg;

p=(struct students *)malloc(sizeof(struct students));

head=create(head

&n);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/

while(p!=NULL)

{

if((p->Sjjg)>Sjjg)/*比较*/

Sjjg=p->Sjjg;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Sjjg==Sjjg){

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);/*浏览排序后的信息*/

printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");

return;

}

/*按数字电路排序*/

void SortSzdl(struct students * head)

{

struct students *p

*tail; /*定义中间变量*/

int n;

double Szdl;

p=(struct students *)malloc(sizeof(struct students));

head=create(head

&n);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/

while(p!=NULL)

{

if((p->Szdl)>Szdl)/*比较*/

Szdl=p->Szdl;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Szdl==Szdl){

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Szdl==Szdl){ /*成绩相同时无需比较*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);/*浏览排序后的信息*/

printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");

return;

}

/*按计算机组成原理排序*/

void SortJsj(struct students * head)

{

struct students *p

*tail; /*定义中间变量*/

int n;

double Jsj;

p=(struct students *)malloc(sizeof(struct students));

head=create(head

&n);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

while(head->next!=NULL) /*利用选择法排序*/

{

tail=NULL;

p=head;

Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/

while(p!=NULL)

{

if((p->Jsj)>Jsj)/*比较*/

Jsj=p->Jsj;

tail=p;

p=p->next;

}

tail=NULL;

p=head;

while(p->next!=NULL)

{

if(p->Jsj==Jsj){

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

if(p==head)

head=head->next;

else

tail->next=p->next;

}

tail=p;

p=p->next;

}

if(p->Jsj==Jsj){ /*成绩相同时无需比较*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

tail->next=NULL;

}

}

p=head; /*将链表赋给结构体指针*/

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);/*浏览排序后的信息*/

printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");

return;

}

/*按学号删除学生成绩信息*/

struct students * Delete(struct students * head

char m[15])

{

struct students *ptr1

*ptr2;

int n;

printf("\n所有学生信息如下:\n");

Browse(head);

printf("\n请输入想要删除的学生学号:");

scanf("%s"

m);

head=create(head

&n);

if(head==NULL){

printf("无学生信息!\n");

return head;

}

if((strcmp(head->Num

m)==0)&&head!=NULL)

{

ptr2=head;

head=head->next;

free(ptr2);

}

if(strcmp(head->Num

m)!=0){

ptr1=head;

ptr2=head->next;

while(ptr2!=NULL){

if(strcmp(ptr2->Num

m)==0){

ptr1->next=ptr2->next;

free(ptr2);

}

else

ptr1=ptr2;

ptr2=ptr1->next;

}

}

fprint_(head);

printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"

m);

return head;

}

/*修改学生信息(按编号修改)*/

struct students * Revise()

{

int n=0

t;

char num[10];

char Num[10]; /*字符型学生学号*/

char Name[20]; /*字符型学生姓名*/

char Sex[3]; /*字符型学生性别*/

double English; /*双精度实型英语成绩*/

double Java; /*双精度实型Java成绩*/

double Sjjg; /*双精度实数据结构*/

double Szdl; /*双精度实型数字电路*/

double Jsj; /*计算机组成原理*/

struct students *head=NULL;

struct students *p;

printf("\n所有学生信息如下:\n");

Browse(head);

head=create(head

&n);

printf("\n输入需要修改的学生的学号:");

scanf("%s"

num);

p=head;

while(head!=NULL)

{

if(strcmp(p->Num

num)==0)

{

system("cls");

Revisemenu();

printf("编号为%s的学生信息如下:\n"

num);

printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");

printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"

p->Name

p->Num

p->Sex

p->English

p->Java

p->Sjjg

p->Szdl

p->Jsj);

while(1){

printf("请选择需要修改的信息:");

scanf("%d"

&t);

switch(t){

case 1:

printf("请输入新姓名:");

scanf("%s"

Name);

strcpy(p->Name

Name);

break;

case 2:

printf("请输入新学号:");

scanf("%s"

&Num);

strcpy(p->Num

Num);

break;

case 3:

printf("请输入新性别:");

scanf("%s"

Sex);

strcpy(p->Sex

Sex);

break;

case 4:

printf("请输入新英语成绩:");

scanf("%lf"

&English);

p->English=English;

break;

case 5:

printf("请输入新Java成绩:");

scanf("%lf"

&Java);

p->Java=Java;

break;

case 6:

printf("请输入新数据结构成绩:");

scanf("%lf"

&Sjjg);

p->Sjjg=Sjjg;

break;

case 7:

printf("请输入新数字电路成绩:");

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

c语言学生成绩管理系统含源代码

C 语言程序设计作业 一设计项目:学生成绩管理系统 二总体设计: 2:模块功能说明: 1 输入功能:输入学生姓名学号及成绩。 2 查看功能:输出姓名学号及各科成绩。 3 查询功能:通过学号查询学生姓名及各科成绩。 4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。 5 修改功能:通过输入学号修改指定学生的错误信息。 6添加功能:添加学生信息。 7删除功能:通过输入学号输入指定学生信息。 8保存功能:将学生信息保存。 9 退出系统。 3:主要函数之间的调用关系及各自功能: 主要函数的函数原型 void inputscore(void); void savescore(void); void avergescore(void); void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void); void modify(void);

void delscore(void); void menu(void); i.在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。ii.在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高低排序输。 出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计 算。 iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。 iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生名单。 v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能vi.在菜单界面输入6,调用add()函数实现添加学生成绩。 vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。 viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。 ix.在菜单界面输入9,退出成绩管理系统。

数据结构c语言版试题大全含答案

1 绪论沈阳理工大学应用技术学院信息与控制学院 计算机科学与技术教研室 2011-5-8

数据结构复习题:绪论 单选题 1、在数据结构中,与所使用的计算机无关的数据叫_____结构。 A存储|B物理|C逻辑|D物理和存储 2、在数据结构中,从逻辑上可以把数据结构分成______。 A动态结构和静态结构|B紧凑结构和非紧凑结构|C线性结构和非线性结构|D内部结构和外部结构图 3、数据结构在计算机内存中的表示是指_______。 数据的存储结构|数据结构|数据的逻辑结构|数据元素之间的关系 4、在数据结构中,与所使用的计算机无关的是数据的______结构。 逻辑|存储|逻辑和存储|物理 5、在以下的叙述中,正确的是_____。 线性表的线性存储结构优于链表存储结构|二维数组是其数据元素为线性表的线性表|栈的操作方式是先进先出|队列的操作方式是先进后出 6、在决定选取何种存储结构时,一般不考虑_______。 各结点的值如何|结束个数的多少|对数据有哪些运算|所用编程语言实现这种结构是否方便 7、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_______。 数据的处理方法|数据元素的类型|数据元素之间的关系|数据的存储方法 8、下面说法错误的是_______。 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估计算法执行时间的一个上界 (4)同一个算法,实现语句的级别越高,执行效率越低 (1)|(1)、(2)|(1)、(4)|(3) 9、通常要求同一逻辑结构中的所有数据元素具有相同的特性。这意味着______。 数据元素具有同一特点|不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致|每个数据元素都一样|数据元素所包含的数据项的个数要相等 10、以下说法正确的是_______。 数据元素是数据的最小单位|数据项是数据的基本单位|数据结构是带结构的数据项的集合|一些表面上很不相同的数据可以有相同的逻辑结构 11、____是数据的最小单元,_____是数据的基本单位. 数据项|数据元素|信息项|表元素 12、数据结构是指_____以及它们之间的_____. (1)数据元素(2)结构|(1)计算方法(2)关系|(1)逻辑存储(2)运算|(1)数据映像(2)算法 13、计算机所处理的数据一般具备某种内在的关系,这是的指_____. 数据和数据之间存在的某种关系|元素和元素之间存在某种关系|元素内部具有某种结构|数据项和数据项之间存在某种关系 14、数据的逻辑结构可以分为_____两类. 动态结构和表态结构|紧凑结构和非紧凑结构|线性结构和非线性结构|内部结构和外部结构 15、数据的逻辑结构是指_____关系的整体. 数据元素之间逻辑|数据项之间逻辑|数据类型之间|存储结构之间 16、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_____. 数据的处理方法|数据元素的类型|数据元素之间的关系|数据的存储方法

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题 一、选择题。 1在数据结构中,从逻辑上可以把数据结构分为 C 。 A ?动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2?数据结构在计算机内存中的表示是指_A_。 A .数据的存储结构B.数据结构 C .数据的逻辑结构 D .数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A .逻辑 B .存储C.逻辑和存储 D .物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_C A .数据的处理方法 B .数据元素的类型 C.数据元素之间的关系 D .数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A A .各结点的值如何C.对数据有哪些运算 B .结点个数的多少 D .所用的编程语言实现这种结构是否方 6.以下说法正确的是D A .数据项是数据的基本单位 B .数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D .一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1) A .找出数据结构的合理性B.研究算法中的输入和输出的关系 C .分析算法的效率以求改进C.分析算法的易读性和文档性 (2) A .空间复杂度和时间复杂度B.正确性和简明性 &下面程序段的时间复杂度是0( n2) s =0; for( I =0; i

学生成绩管理系统源代码

学生成绩管理系统源代码-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

#include #include #include #include #include #include #include #include #define PRINT1 textcolor(12); cprintf("\r 请按任意键返回主菜单 \n\r");textcolor(10); getch();clrscr(); break; int shoudsave=0; struct student /* 学生信息结构体定义*/ { char num[10],name[20],cla[4]; int score1,score2,score3,total,ave; }; typedef struct node { struct student data; struct node *next; }Node,*L; void print1() { cprintf("\r============================================================= ==================="); } void print2() { cprintf("\n\r 1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n"); cprintf("\n\r 2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n"); cprintf("\n\r 3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n"); cprintf("\n\r 4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩."); cprintf("\n\r 5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n"); cprintf("\n\r 6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n"); cprintf("\n\r 7.显示学生成绩信息在这里你可以看到系统中所有学生的信 息.\n"); cprintf("\n\r 8.保存学生成绩信息在这里你可以将学生你信息保存到内存 中.\n");

数据结构(C语言版)期末复习

数据结构(C语言版)期末复习汇总 第一章绪论 数据结构:是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 数据结构分为:逻辑结构、物理结构、操作三部分 逻辑结构:集合、线性结构、树形结构、图(网)状结构 物理结构(存储结构):顺序存储结构、链式存储结构 算法:是为了解决某类问题而规定的一个有限长的操作序列。 算法五个特性:有穷性、确定性、可行性、输入、输出 评价算法优劣的基本标准(4个):正确性、可读性、健壮性、高效性及低存储量 语句频度的计算。 算法的时间复杂度: 常见有:O(1),O(n),O(n2),O(log2n),O(nlog2n),O(2n) 第二章线性表 线性表的定义和特点: 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列。线性表中元素个数n(n≥0)定义为线性表的长度,n=0时称为空表。 非空线性表或线性结构,其特点: (1)存在唯一的一个被称作“第一个”的数据元素; (2)存在唯一的一个被称作“最有一个”的数据元素; (3)除第一个之外,结构中的每个数据元素均只有一个前驱; (4)除最后一个之外,结构中的每个数据元素均只有一个后继。 顺序表的插入:共计n个元素,在第i位插入,应移动(n-i+1)位元素。 顺序表的删除:共计n个元素,删除第i位,应移动(n-i)位元素。 线性表的两种存储方式:顺序存储、链式存储。 顺序存储 概念:以一组连续的存储空间存放线性表; 优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑; 缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充; 操作:查找、插入、删除等 查找: ListSearch(SqlList L,ElemType x,int n) { int i; for (i=0;i

用java编写的学生成绩管理系统代码

; public class Student { private String id; private String name; private int math; private int english; private int java; private int computer; public String getId() { return id; } public void setId(String id) { = id; } public String getName() { return name; } public void setName(String name) {

= name; } public int getMath() { return math; } public void setMath(int math) { = math; } public int getEnglish() { return english; } public void setEnglish(int english) { = english; } public int getJava() { return java; } public void setJava(int java)

{ = java; } public int getComputer() { return computer; } public void setComputer(int computer) { = computer; } public static void main(String[] args) throws Exception { String id; String cid; String name; int math; int english; int java; int computer; String DBDriver = ""; String conStr = "jdbc:odbc:student"; Connection con = null; Statement stmt = null; ResultSet rs = null;

数据结构复习题集答案(c语言版严蔚敏)

人生难得几回搏,此时不搏更待何时? 第1章绪论 1.1 简述下列术语:数据 数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型 解:数据是对客观事物的符号表示 在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称 数据元素是数据的基本单位 在计算机程序常作为一个整体进行考虑和处理 数据对象是性质相同的数据元素的集合 是数据的一个子集 数据结构是相互之间存在一种或多种特定关系的数据元素的集合 存储结构是数据结构在计算机中的表示 数据类型是一个值的集合和定义在这个值集上的一组操作的总称 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作 是对一般数据类型的扩展 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别 解:抽象数据类型包含一般数据类型的概念 但含义比一般数据类型更广、更抽象 一般数据类型由具体语言系统部定义 直接提供给编程者定义用户数据 因此称它们为预定义数据类型 抽象数据类型通常由编程者定义 包括定义它所使用的数据和在这些数据上所进行的操作 在定义抽象数据类型中的数据部分和操作部分时 要求只定义到数据的逻辑结构和操作说明 不考虑数据的存储结构和操作的具体实现 这样抽象层次更高 更能为其他用户提供良好的使用接口 1.3 设有数据结构(D R) 其中

试按图论中图的画法惯例画出其逻辑结构图 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数) 解: ADT Complex{ 数据对象:D={r i|r i为实数} 数据关系:R={} 基本操作: InitComplex(&C re im) 操作结果:构造一个复数C 其实部和虚部分别为re和im DestroyCmoplex(&C) 操作结果:销毁复数C Get(C k &e) 操作结果:用e返回复数C的第k元的值 Put(&C k e) 操作结果:改变复数C的第k元的值为e IsAscending(C) 操作结果:如果复数C的两个元素按升序排列 则返回1 否则返回0 IsDescending(C) 操作结果:如果复数C的两个元素按降序排列 则返回1 否则返回0 Max(C &e) 操作结果:用e返回复数C的两个元素中值较大的一个 Min(C &e) 操作结果:用e返回复数C的两个元素中值较小的一个

学生成绩管理系统(数据结构C语言版源代码)54843943

天天都是一个出发点,每天都有一点提高,每天都有一点收成! #include #include #include struct students{ char Sex[3]; /*字符型学生性别*/ double English; /*双精度实型英语成绩*/ double Java; /*双精度实型Java成绩*/ double Sjjg; /*双精度实数据结构*/ double Szdl; /*双精度实型数字电路*/ double Jsj; /*计算机组成原理*/ struct students *next; /*用与构建连表指向下一结点*/ }; FILE *fp; /*定义全局变量fp*/ void Revisemenu();/*修改菜单*/ void Sortmenu();/*排序菜单*/ void menu();/*主菜单*/ void secret();/*安全验证*/ struct students * Input();/*新建学生信息*/ void fprint(struct students *head);/*将信息导入文件可追加*/ void fprint_(struct students *head);/*将信息导入文件并覆盖*/ void Browse(struct students *head);/*浏览全部学生信息*/ struct students * create(struct students *head int *n);/*从tushu_list中读取数据构建链表*/ void SortEnglish(struct students * head);/*按英语成绩排序*/ void SortJava(struct students * head);/*按Java成绩排序*/ void SortSjjg(struct students * head);/*按数据结构成绩排序*/ void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * head struct students * Revise();/*修改学生信息(按编号修改)*/ /*主菜单*/ void menu() { printf("\n\n"); printf("***************************************************\n"); printf(" 学生成绩管理系统 \n"); printf(" 1-添加新同学 2-浏览学生信息 \n"); printf(" 5-按成绩排序 6-修改学生信息 \n"); printf(" 7-删除学生信息 0-退出系统 \n"); printf("___________________________________________________\n");

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构基础及深入及考试 复习资料 习题及实验参考答案见附录 结论 1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列 3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。 4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。 5、在数据结构中,从逻辑上可以把数据结构分成( C ) A、动态结构和表态结构 B、紧凑结构和非紧凑结构 C、线性结构和非线性结构 D、内部结构和外部结构 6、算法的时间复杂度取决于( A ) A、问题的规模 B、待处理数据的初态 C、问题的规模和待处理数据的初态 线性表 1、线性表的存储结构包括顺序存储结构和链式存储结构两种。 2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。 A、(n-1)/2 B、n C、n+1 D、n-1 E、n/2 F、(n+1)/2 G、(n-2)/2 3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B ) A、正确的 B、错误的 C、不一定,与具体的结构有关 4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D ) A、必须是连续的 B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以 5、带头结点的单链表为空的判定条件是( B ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 6、不带头结点的单链表head为空的判定条件是( A ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 7、非空的循环单链表head的尾结点P满足( C ) A、p->next==NULL B、p==NULL C、p->next==head D、p==head 8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B ) A、O(1) B、O(n) C、O(n2) D、O(nlog2n) 9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )

数据结构C语言版期末考试题库单选题

一、单项选择 1 . 数据在计算机内有链式和顺序两种存储方 式,在存储空间使用的灵活性上,连式存储比顺序存 储要 A . 低 B . 高 C . 相同 D . 不好说 2 . 通常对数组进行的两种基本操作是() A . 建立与删除 B . 索引和修改 C . 查找和修改 D . 查找与索引 3 . 如果F是由有序树T转换而来的二叉树,那么T中结点的前序就是F 中结点的()。 A . 中序 B . 前序 C . 层次序 D . 后序 4 . 由树的定义,具有3个结点的树有()种形态 A . 2 B . 3 C . 4 D . 5 5 . 以下说法错误的是 ( ) A . 二叉树可以是空集 B . 二叉树的任一结点都有 两棵子树 C . 二叉树与树具有相同的

树形结构 D . 二叉树中任一结点的两 棵子树有次序之分 6 . 若节点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为 A . 顺序存储结构 B . 链式存储结构 C . 索引存储结构 D . 散列存储结构 7 . 已知二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是() A . bdgcefha B . gdbecfha C . bdgaechf D . gdbehfca 8 . 算法分析的两个主要方面 A . 空间复杂度和时间复杂 度 B . 正确性和简明性 C . 可读性和文档性 D . 数据复杂性和程序复杂 性 9 . 设顺序线性表的长度为30,分成5块,每块6个元素,如果采用分块查找,则其平均查找长度为( )。 (A) 6 (B) 11 (C) 5 (D) 6.5 A . B . C . D . 10 . 若邻接表中有奇数个表节点,则一定( ) A . 图中有奇数个顶点 B . 图中有偶数个顶点 C . 图为无向图 D . 图为有向图

学生成绩管理系统代码

C程序学生管理系统 /* Note:Your choice is C IDE */ #include"" #include"" #include"" typedef struct student示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n"); scanf("%d",&m); fflush(stdin); switch(m) { case 1:printf("\n=>该系统拥有%d名学生!\n\n",head->; p=head->next; printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n\n"); while(p) { printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->,p->,p->, p->,p->,p->; p=p->next; } break; case 2:printf("=>请输入查找姓名!\n"); gets(N); fflush(stdin); p=head->next; while(p) { if(strcmp(p->,N)==0) { printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n"); printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->,p->,p->, p->,p->,p->; break; } else {

p=p->next; if(p==NULL) printf("=>你要查的学生不存在!"); } } break; case 3: printf("=>请输入查找学号!\n"); scanf("%d",&m); fflush(stdin); p=head->next; while(p) { if(p->==m) { printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n"); printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->,p->,p->, p->,p->,p->; break; } else { p=p->next; if(p==NULL) printf("=>你要查的学生不存在!\n"); } } break; case 4:n=1;break; } } return 1; } int range(unit *head)学号\t2.按成绩\n\n"); printf("=>请选择操作!\n》"); scanf("%d",&n); fflush(stdin); if(q==NULL) { printf("=>无学生可排序!\n");

数据结构C语言版(第2版)严蔚敏人民邮电出版社课后习题答案

数据结构(C语言版)(第2版) 课后习题答案 李冬梅 2015.3

目录 第1章绪论 (1) 第2章线性表 (5) 第3章栈和队列 (13) 第4章串、数组和广义表 (26) 第5章树和二叉树 (33) 第6章图 (43) 第7章查找 (54) 第8章排序 (65)

第1章绪论 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: 数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。 数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。 逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 存储结构:数据对象在计算机中的存储表示,也称为物理结构。 抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 答案: 例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。 这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。 即相同的逻辑结构,可以对应不同的存储结构。 3.简述逻辑结构的四种基本关系并画出它们的关系图。

数据结构(c语言版)课后习题答案完整版

第1章绪论 5.选择题:CCBDCA 6.试分析下面各程序段的时间复杂度。 (1)O(1) (2)O(m*n) (3)O(n2) (4)O(log3n) (5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2) (6)O(n) 第2章线性表 1.选择题 babadbcabdcddac 2.算法设计题 (6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。 ElemType Max (LinkList L ){ if(L->next==NULL) return NULL; pmax=L->next; //假定第一个结点中数据具有最大值 p=L->next->next; while(p != NULL ){//如果下一个结点存在 if(p->data > pmax->data) pmax=p; p=p->next; } return pmax->data; (7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。 void inverse(LinkList &L) { // 逆置带头结点的单链表 L p=L->next; L->next=NULL; while ( p) { q=p->next; // q指向*p的后继 p->next=L->next; L->next=p; // *p插入在头结点之后 p = q; }

} (10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。 [题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。 void Delete(ElemType A[ ],int n) ∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。 {i=1;j=n;∥设置数组低、高端指针(下标)。 while(i

c语言课程设计报告+学生成绩信息管理系统+源代码

实验报告 一、问题陈述及其需求分析 (一)问题陈述 学生信息管理系统是对学生信息的基本管理,其中包括以下及模块: (1)增加一个学生的信息(需输入要增加学生的所有信息); (2)统计本班学生总人数及男女生人数。 (3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。 (4)按学号对所有学生信息排序,并输出结果; (5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。( 二) 功能需求分析 学生信息管理系统设计 学生信息包括:学号,姓名,性别,出生年月,电话 使之提供以下功能: 1、系统以菜单方式工作 2、建立链表并显示 3、插入新的学生信息 4、删除某学号的学生信息 5、查找某学号的学生信息 6、对学生信息排序 7、统计学生人数 8、输出学生信息 二总体设计 (一)模块 依据程序的数据结构,描述该程序的层次结构,如下图:

1、建立链表并显示 void createlist(struct stucode **r); 2、插入新的学生信息 void insert(struct stucode **r); 3、删除某学号的学生信息 void del(struct stucode **r); 4、查找某学号的学生信息 void search1(struct stucode *r); 5、对学生信息排序 void sort(struct stucode **r); 6、统计学生人数 void search2(struct stucode *r); 7、输出学生信息 void out(struct stucode *r);

《数据结构(C语言描述)》期末试卷要点

专业 《数据结构(C 语言描述)》期末试卷 ( — 学年 第 学期) 一、填空(10分) 1、一个m 阶B-树中,每个结点最少有( ceil(m/2) )个儿子结点,m 阶B+树中每个结点(除根外)最多有( m )个儿子结点. 2、n(n>0)个结点构成的二叉树,叶结点最多有( floor((n+1)/2) )个,最少有( 1 )个。若二叉树有m 个叶结点,则度为2的结点有( m-1 )个。 3、顺序查找方法适用于存储结构为( 顺序表和线性链表 )的线性表,使用折半查找方法的条件是(查找表为顺序存贮的有序表 ) 4、广义表A=(( ),(a ,(b ,c)),d)的表尾Gettail(A)为( ((a,(b,c)),d) ) 5、直接插入排序,起泡排序和快速排序三种方法中,( 快速排序 )所需的平均执行时间最小;( 快速排序 )所需附加空间最大。 二、选择(10分) 1、倒排文件的主要优点是:( C ) A 、便于进行插入和删除 B 、便于进行文件的合并 C 、能大大提高基于非主关键字数据项的查找速度 D 、易于针对主关键字的逆向检索 2 下面程序段的时间复杂性为( C ) y=0; while(n>=(y+1)*(y+1)) { y++; } A 、O(n) B 、O(n 2) C 、 O(sqrt(n)) D 、 O(1) 3、若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是( C ) A 、二叉排序树 B 、哈夫曼树 C 、堆 D 、AVL 树 4、栈和队列都是( B ) A 、顺序存储的线性结构 B 、限制存取点的线性结构 C 、链式存储的线性结构 D 、限制存取点的非线性结构 5、用顺序查找方法查找长度为n 的线性表时,在等概率情况下的平均查找长度为( D ) A 、n B 、n/2 C 、(n-1)/2 D 、(n+1)/2 三、简答(30分) 1、已知一棵二叉树的前序扫描序列和中序扫描序列分别为ABCDEFGHIJ 和BCDAFEHJIG ,试给出该二叉树的后序序列并绘出该二叉树对应的森林。 院(系) 班级 姓名 学号 ……………………………………………装…………………………订………………………线……………………………………………

学生成绩管理系统源代码

#include #include #include #include #include #include #include #include #define PRINT1 textcolor(12); cprintf("\r 请按任意键返回主菜单\n\r");textcolor(10); getch();clrscr(); break; int shoudsave=0; struct student /* 学生信息结构体定义*/ { char num[10],name[20],cla[4]; int score1,score2,score3,total,ave; }; typedef struct node { struct student data; struct node *next; }Node,*L; void print1() { cprintf("\r======================================================================= ========="); } void print2() { cprintf("\n\r 1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n"); cprintf("\n\r 2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n"); cprintf("\n\r 3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n"); cprintf("\n\r 4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩."); cprintf("\n\r 5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n"); cprintf("\n\r 6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n"); cprintf("\n\r 7.显示学生成绩信息在这里你可以看到系统中所有学生的信息.\n"); cprintf("\n\r 8.保存学生成绩信息在这里你可以将学生你信息保存到内存中.\n"); cprintf("\n\r 9.帮助学生成绩信息在这里你可以获得帮助信息.\n");

相关主题
文本预览
相关文档 最新文档