目录
前    言    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 | eLNode }
    数据关系:R1={<e_i,e_(i+1)> | eLNode ,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小时内删除。