目录
前 言 2
概要设计 3
1.1 数据结构设计 3
2.1 算法设计 3
2.1.1 建立链表的算法 3
2.1.2 链表插入一个元素的算法 3
2.1.3 链表删除一个元素的算法 3
3.1 ADT描述 4
4.1 详细设计…………………………………………… ……………………………… 4
4.1.1 数据存储结构……………………………… ……………………………… 4.
4.1.2 主要伪代码…… …………………… ……………………………………… 4
软件测试 7
心得体会 11
源代码 12
参考文献………………………………………………………………………. ..21
前 言
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已经成为其他理工专业的热门选修课。
随着计算机科学的技术和发展,计算机的功能和运算速度不断地提高,其应用于信息处理的范围日益扩大。与之相应的,计算机的加工处理对象也从简单的数据发展到一般的符号,进而发展到更复杂的数据结构。数据结构是计算机程序设计的重要理论技术基础,数据结构的表示和操作都涉及到算法,如何描述数据的结构和讨论有关的算法,又涉及到程
序设计语言。因此,它不仅是计算机学科的核心课程,而且已经成为其他理工专业的热门选修课。
我们通过对这门基础课程的学习,要学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适合的逻辑结构,储存结构及其相应的算法,并初步掌握算法时间分析和空间分析的技术。
通过实际操作去了解数据结构原理,练习编写代码的能力,以及抽象能力。
从课程性质上讲,“数据结构”是一门专业技术基础课。它的要求是学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构,存储结构及相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,数据结构的学习过程也是复杂程序设计的训练过程,要求编写的程序结构清楚和正确易读,符合软件工程的规范。
概要设计
1.1 数据结构设计
采用链式储存结构。
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
2.1 算法设计
2.1.1 建立链表的算法
(1)算法思想分析
首先从表尾到表头逆向建立单链表,然后再建立的单链表基础上进行对链表上的元素进行查询,删除,插入的操作。
(2)要点描述
首先建立一个带头结点的单链表,通过申请内存,先建立一个空链表。然后结点的插入,
建立一个有多个结点的链表。在进行查询等操作。
(3)时间和空间复杂度分析
程序的时间复杂度为O(n)。
2.1.2 链表插入一个元素的算法
(1)算法思想分析
要生成一个新数据域为X的结点,然后插入在单链表中。
(2)要点描述
在链表中插入结点只需要修改指针。若要在第 i 个结点之前插入元素,修改的是第 i-1 个结点的指针。
(3)时间和空间复杂度分析
时间复杂度O(n)
2.1.3 链表删除一个元素的算法
(1)算法思想分析
要删除一个结点,必须修改指针并且释放空间。
(2)要点描述
到线性表中第i-1个结点,修改其指向后继的指针。
(3)时间和空间复杂度分析
时间复杂度O(n)
3.1 ADT描述
ADT LinkList{
数据对象:D={ e | e∈LNode }
数据关系:R1={<e_i,e_(i+1)> | e∈LNode ,e >0}
基本操作:
GreateList_L(&L, n)
操作结果:构造了一个长为n的数据链表
ListDelete_L(&L, i, &e)
初始条件:链表L已存在而且非空
操作结果:删除L的第i个数据,并且用e返回其值
ListInsert_L(&L, i, e)
初始条件:链表L已存在
操作结果: 在L的第i个位置插入数据e
GetElem(L, i, e)
初始条件:链表L已存在
操作结果:用e返回L中的第i个数据
}ADT LinkList
4.1 详细设计
4.1.1数据存储结构设计
采用单链式线性表实现
4.1.2 主要伪代码
Status GetElem(LinkList L, int i, ElemType *e)
{
int j=0;
int d;
LinkList p = L;
while(p&&j<i)
{
p = p->next;
j++;
}
if( !p || j > i)
return ERROR;
printf("您要查询的元素是:\n");
d=p->data;
printf("%d",d);
printf("\n");
}
void InitList(LinkList *L)
c语言listinsert函数{
*L = (LinkList)malloc(sizeof(struct LNode));
if( !*L )
exit(OVERFLOW);
(*L)->next = NULL;
}
Status ListInsert(LinkList L, int i, ElemType e)
{
int j = 0;
LinkList p = L, s;
while( p && j < i-1)
{
p = p->next;
j++;
}
if( !p|| j > i-1)
return ERROR;
s = (LinkList)malloc(sizeof(struct LNode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete(LinkList L, int i, ElemType *e)
{
int j = 0;
LinkList p = L, q;
while(p->next && j < i-1)
{
p = p->next;
j++;
}
if( !p->next || j > i-1)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
void ListTraverse(LinkList L, void(*vi)(ElemType))
{
LinkList p = L->next;
while(p)
{
vi(p->data);
p = p->next;
}
printf("\n");
}
void ListPrint(LinkList L)
{
LinkList p = L->next;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void printInt(int data)
{
printf("%d ", data);
}
.
软件测试
图一(主界面)
图二(插入学生信息)
图三(显示所有学生信息)
图四(查询个人信息)
图五(统计信息)
图六(修改信息)
图七(保存数据)
图八(删除信息)
心得体会
通过本程序的设计,我对数据结构作了以下总结:要解决一道程序题必须先要认真捕捉改
程序中的有用信息,出解决方法。先规划好,程序需要什么样的数据结构,什么函数,对程序有什么要求。然后从整体把握对程序设计进行分工,相应地把程序分成若干模块,具体实现各部分实行相应的功能。一个程序要顺利地进行设计,一是要对程序的功能有全面的了解,如果漏了某些部分,都会使得这个程序调试不出来或者是令该程序没有达到预想的效果。其次,在程序的编译中,必须注重程序设计过程中的细节,像单链表的程序,就要理解链表的概念,理解链表的数据特点,要清楚知道数据域和指针域的作用,否则,很容易会浪费大量时间在检测错误上面。
要说到解题的思考方向,如果要总结成规律,我认为要灵活的进行方法的设计,通过不同的方法来实现不同的功能,如通过结点的插入来实现链表的创建。同时应该注意各种语句的选择,要先预想好需要什么样的语句来实现函数定义,尽量简单快捷地完成,避免出错。
要规范面向对象程序设计师的书写协管,在这次课程设计中,我们再次感受到,规范的程序书写,可以更好的进行后期的差错补漏。还应该注意各种面向对象语言语法的运用,例如继承的方法,都要严格按照语法来进行,否则很容易就会出现错误,甚至严重影响课程设计的进度。
源代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; //
struct student
{
char num[10];//学号
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];//最近更新时间
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
int menu()
{
char m[3];
int n;
printf(" ************************欢迎进入学生成绩管理系统******************************\n\n");
printf("\t欢迎使用本学生管理系统,本系统将为您提供历史学生信息查询,学生成绩信息管理功能。\n");
printf("********************************************************************************");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论