数据结构课程设计论文

时间:2024.4.20

课程设计(论文)任务书

  信息 学  院  计算机 专  业 20##--  1  班      

一、课程设计(论文)题目     基础软件设计                       

二、课程设计(论文)工作自2015 1228 日起至20##18 日止。

三、课程设计(论文) 地点:    5-205                                            

四、课程设计(论文)内容要求:

1.本课程设计的目的

1、 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结

构、存储结构和操作实现算法,以及它们在程序中的使用方法。

2、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计

能力;使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设

计的基本能力。初步掌握软件开发过程的问题分析、系统设计、程序编码、测

试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;  

2.课程设计的任务及要求

1)基本要求:

1. 分析题目,查阅相关资料;

2. 算法设计、数据结构设计;

3. 编写代码并调试;

4. 完成课程设计报告。

2)创新要求:

在基本要求达到后,可进行创新设计。

3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写论文

(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等

(3)课程设计论文装订按学校的统一要求完成

4)答辩与评分标准:

(1)完成问题的解决方法分析:20分;

(2)算法思想(流程):20分;

(3)数据结构:20分;

(4)测试数据:20分

(5)回答问题:20分。

5)参考文献:  

   

         《C程序设计》(第二版) 谭浩强 著     清华大学出版社出版

         《C++程序设计》       谭浩强 著      清华大学出版社出版

        《数据结构》(C语言版) 严蔚敏、吴伟民 著 清华大学出版社出版

6)课程设计进度安排

内容                 天数      地点

            构思及收集资料                  图书馆

              编程与调试                 实验室

               撰写论文             

 

               

                             学生签名:______________________

20##年 12 月 28 日

课程设计(论文)评审意见

(1)完成问题分析(20分):优( )、良( )、中( )、一般( )、差( );

(2)算法思想  (20分):优( )、良( )、中( )、一般( )、差( );

(3)数据结构  (20分):优( )、良( )、中( )、一般( )、差( );

(4)测试数据    (20分):优( )、良( )、中( )、一般( )、差( );

(5)回答问题  (20分):优( )、良( )、中( )、一般( )、差( );

(6)格式规范性及考勤是否降等级:是(√)、否( )

评阅人:  赵海霞  职称:讲师    

20##年1 月10 日

 

目录

一、综合软件设计目的

二、综合软件设计内容

1、课程设计的题目及简介

2、设计说明

3、程序部分清单

三、测试数据:

四、总结(写出心得和总结)

五、参考文献

一、综合软件设计目的

    1、 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。

2、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

二、综合软件设计内容

   1.课程题目及简介

题目:基础软件设计

简介:使用C语言实现编码,实现数据结构各种功能。全面性涉及到所有内容,系统的总结了数据结构各个方面。

2.设计说明:

   此程序采用多菜单分布执行的方式,可以简洁、方便的控制程序的运行。主菜单下含有多个子菜单对应着不同类型的数据结构内容。

   分别是:线性表、栈、串、队列、树与森林、图、排序和查找。

   各个子菜单下的每项功能均与数据结构内容相关。线性表菜单涉及到综述数据、数据结构和抽象数据类型。其余各子菜单也各自涉及到各种数据结构的基本类型及其功能。

  3.核心代码

//头文件

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<conio.h>

#include<math.h>

#include<time.h>

#include <io.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MaxLength 50

typedef int Status;

void chuanshun();

void xianshun();

void zhan();

void xianxingbiao();

void paixu();

//void dui();

void sanlie();

void chu();

void chazhao();

//栈定义

typedef int SElemType;

typedef struct

{

       SElemType data[MaxLength];

       int top;

}SqStack;

Status InitStack(SqStack *S);

Status PushStack(SqStack *S,SElemType e);

void TraverseStack(SqStack S);

Status GetTop(SqStack S,SElemType *e);

Status PopStack(SqStack *S,SElemType *e);

Status ClearStack(SqStack *S);

typedef struct StackNode

{

       SElemType data;

       struct StackNode *next;

}StackNode,*LinkStackPtr;

typedef struct

{

       LinkStackPtr top;

       int count;

}LinkStack;

Status InitStack1(LinkStack *S);

Status PushStack1(LinkStack *S,SElemType e);

void TraverseStack1(LinkStack S);

Status PopStack1(LinkStack *S,SElemType *e);

Status ClearStack1(LinkStack *S);

typedef char SElemTypec;

typedef struct

{

       char data[50];

       int top;

}SqStackc;

Status InitStackc(SqStackc *S);

Status PushStackc(SqStackc *S,SElemTypec e);

void TraverseStackc(SqStackc S);

Status ClearStackc(SqStackc *S);

Status PopStackc(SqStackc *S,SElemTypec *e);

void shuzhizhuanhuan();

void migongwenti();

void hangbianji();

void biaodashi();

void kuohaopipei();

void zhanshun();

void zhanlian();

void cheng();

//线性表定义

typedef int LElemType;

typedef struct

{

       LElemType data[MaxLength];

       int Length;

}SeqList;

Status InitList(SeqList *L);

Status ListInsert(SeqList *L,int i,LElemType e);

SeqList CreatList(SeqList L);

void TraverseList(SeqList *L);

Status DeleteList(SeqList *L,int n);

Status FindList(SeqList *L,LElemType e);

Status AddList(SeqList *L,LElemType e);

LElemType FindnumList(SeqList *L,int n);

Status DestroyList(SeqList *L);

typedef struct Node

{

       LElemType data;

       struct Node *next;

}Node;

typedef struct Node *LinkList;

Status InitList1(LinkList *L);

Status ListLength1(LinkList L);

Status ListInsert1(LinkList *L,int n,LElemType e);

void TraverseLint1(LinkList L);

//Status ListDelete1(LinkList *L,intListTraverse1 n);

Status ListDelete1(LinkList *L,int i,LElemType *e);

Status FindnumList1(LinkList *L,int n,LElemType *e);

Status LocateElem1(LinkList *L,LElemType e);

Status CreatListHead1(LinkList *L);

Status ClearList1(LinkList *L);

Status CreateListTail1(LinkList *L,int n);

void xianlian();

void shuanglian();

void er();

//串定义

typedef char String[MaxLength+1];

Status CreatStr(String T,char *chars);

void OutputStr(String T);

Status LengthStr(String T);

Status CompareStr(String S,String T);

Status ConcatStr(String T,String S1,String S2);

Status SubString(String sub,String S1,int n,int m);

int Index(String S, String T, int pos);

Status StrInsert(String S,int pos,String T);

Status StrDelete(String S,int pos,int len);

Status Replace(String S,String T,String V);

void chuanshun();

void chuanlian();

void chuandui();

void chaun();

typedef char TElemType;

typedef struct SNode

{

       char data;

       struct SNode *next;

}SNode;

typedef struct SNode *LString;

Status InitStr(LString *T);

Status InsertStr(LString *T,LElemType chars[]);

//队列

typedef int QElemType;

typedef struct

{

       QElemType data[MaxLength];

       int front;

       int rear;

}SqQueue;

Status InitQueue(SqQueue *Q);

Status TraverseQueue(SqQueue Q);

Status InsertQueue(SqQueue *Q,QElemType e);

Status DeleteQueue(SqQueue *Q,QElemType *e);

Status ClearQueue(SqQueue *Q);

Status EmptyQueue(SqQueue Q);

int LengthQueue(SqQueue Q);

void duishun();

void xunhuandui();

void duilie();

typedef struct QNode

{

       QElemType data;

       struct QNode *next;

}QNode,*QueuePar;

typedef struct

{

       QueuePar front,rear;

}LinkQueue;

Status InitQueue1(LinkQueue *Q);

void duilian();

void kuaipai();

void erchapaixu();

void xier();

void zhipai();

void guibing();

void jishu();

void xuanze();

void shushun();

void jian();

void jia();

void shu();

Status InitStack(SqStack *S)

{

       S->top=-1;

       return OK;

}

Status PushStack(SqStack *S,SElemType e)

{

       if(S->top>=MaxLength-1)

       {

              printf("此栈已满!\n");

              return ERROR;

       }

       S->top++;

       S->data[S->top]=e;

       return OK;

}

void TraverseStack(SqStack S)

{

       int i;

       for(i=0;i<=S.top;i++)

       {

              printf("%d ",S.data[i]);

       }

       printf("\n");

}

Status InitList1(LinkList *L)

{

       *L=(LinkList)malloc(sizeof(Node));

       if(!(*L))

       {

              return ERROR;

       }

       (*L)->next=NULL;

       return OK;

}

Status ListLength1(LinkList L)

{

       int i=0;

       LinkList p=L->next;

       while(p)

       {

              i++;

              p=p->next;

       }

       return i;

}

Status ListInsert1(LinkList *L,int n,LElemType e)

{

       int i;

       LinkList p,s;

       p=*L;

       i=1;

       while(p&&i<n)

       {

              p=p->next;

              i++;

       }

       if(!p||i>n)

       {

              printf("该节点不存在!\n");

       }

       s=(LinkList)malloc(sizeof(Node));

       s->data=e;

       s->next=p->next;

       p->next=s;

       return OK;

}

void ListTraverse1(LinkList L)

{

       LinkList p=L->next;

       while(p)

       {

              printf("%d ",p->data);

              p=p->next;

       }

       printf("\n");

}

Status CreatStr(String T,char *chars)

{

       int i;

       if(strlen(chars)>MaxLength)

              return ERROR;

       else

       {

              T[0]=strlen(chars);

              for(i=1;i<=T[0];i++)

                     T[i]=*(chars+i-1);

              return OK;

       }

}

void OutputStr(String T)

{

       int i;

       for(i=1;i<=T[0];i++)

              printf("%c",T[i]);

       printf("\n");

}

Status LengthStr(String S1)

{

       return S1[0];

}

Status CompareStr(String S,String T)

{

       int i;

       for(i=1;i<=S[0]&&i<=T[0];i++)

       {

              if(S[i]!=T[i])

                     return S[i]-T[i];

       }

       return S[0]-T[0];

}

Status ConcatStr(String T,String S1,String S2)

{

       int i;

       if(S1[0]+S2[0]<=MaxLength)

       {

              for(i=1;i<=S1[0];i++)

                     T[i]=S1[i];

              for(i=1;i<=S2[0];i++)

                     T[S1[0]+i]=S2[i];

              T[0]=S1[0]+S2[0];

              return OK;

       }

       else

       {

              for(i=1;i<=S1[0];i++)

                     T[i]=S1[i];

              for(i=1;i<=MaxLength-S1[0];i++)

                     T[S1[0]+i]=S2[i];

              T[0]=MaxLength;

              return ERROR;

       }

}

Status InitQueue(SqQueue *Q)

{

       Q->front=0;

       Q->rear=0;

       return  OK;

}

Status TraverseQueue(SqQueue Q)

{

       int i;

       i=Q.front;

       while((i+Q.front)!=Q.rear)

       {

              printf("%d ",Q.data[i]);

              i=(i+1)%MaxLength;

       }

       printf("\n");

       return OK;

}

Status InsertQueue(SqQueue *Q,QElemType e)

{

       if ((Q->rear+1)%MaxLength == Q->front)

              return ERROR;

       Q->data[Q->rear]=e;        

       return  OK;

}

Status DeleteQueue(SqQueue *Q,QElemType *e)

{

       if (Q->front == Q->rear)

              return ERROR;

       *e=Q->data[Q->front];

       Q->front=(Q->front+1)%MaxLength;

       return  OK;

}

//二叉排序树

typedef struct TNode

{

       int data;

       struct TNode *lchild;

       struct TNode *rchild;

}TNode,*BSTree;

bool searchTree(BSTree T,int e,BSTree parent,BSTree &p)

{

       if(!T)

       {

              p=parent;

              return false;

       }

       else

       {

              if(e==T->data)

              {

                     p=T;

                     return true;

              }

              else if(e<T->data)

                     return searchTree(T->lchild,e,T,p);

              else

                     return searchTree(T->rchild,e,T,p);

       }

}

bool InsertTree(BSTree &T,int e)

{

       BSTree p;

       if(!searchTree(T,e,NULL,p))

       {

              BSTree pNew=(BSTree)malloc(sizeof(TNode));

              pNew->data=e;

              pNew->lchild=pNew->rchild=NULL;

              if(!p)

                     T=pNew;

              else if(e<p->data)

                     p->lchild=pNew;

              else

                     p->rchild=pNew;

       }

       else

              return false;

}

void TraverseTree(BSTree T)

{

       if(T)

       {

              if(T->lchild)

                     TraverseTree(T->lchild);

              printf("%d ",T->data);

              if(T->rchild)

                     TraverseTree(T->rchild);

       }

}

void erchapaixu()

{

       int n,m;

       BSTree T=NULL;

       srand(time(0));

       printf("请输入要排序的数字数目:\n");

       scanf("%d",&n);

       printf("随机生成的数列为:\n");

       for(int i=1;i<=n;i++)

       {

              m=rand()%100;

              printf("%d ",m);

              InsertTree(T,m);

       }

       printf("\n");

       printf("二叉排序的结果为:\n");

       TraverseTree(T);

       printf("\n");

}

//希尔排序

void shell(int a[], int n)

{

       int i, j, gap,temp,k;

       for(gap=n/2;gap>0;gap/=2)

              for(i=0;i<gap;i++)       

              {

                     for(j=i+gap;j<n;j+=gap)

                            if(a[j]<a[j-gap])

                            {

                                   temp=a[j];

                                   k=j-gap;

                                   while(k>=0&&a[k]>temp)

                                   {

                                          a[k+gap]=a[k];

                                          k-=gap;

                                   }

                                   a[k+gap]=temp;

                            }

              }

}

//

Status SearchHash(HashTable H,int key,int *addr)

{

    *addr = Hash(key); 

    while(H.elem[*addr] != key)

    {

        *addr = (*addr+1) % m;

        if (H.elem[*addr] == -1 || *addr == Hash(key))

            return ERROR;  

    }

    return OK;

}

三、测试数据:

结果测试:

页面初始化

~[DR4_J{C(JO1`9K1[R_R)5

各子菜单及其所含程序@YW6RY[{`6GXU{KU6~EJTRE

PR(W4%0SX98$0HOD8TFQC7U

`[XEJANANOY$@ZJ[UQM)JWI

H~9WXBIE0OHO)7WU6ISVUQV

ENU7{RS1{VA6]4)SJ~HRX35

))BQ728M}2XC}`2X{J}_$7V]8_VQQTYIZOYWX7T8N%G5K1

部分功能执行情况:

1.栈的使用:

ZCLU%DV4B%$JI[D37`6IV53

O0P~${2Z8~]EYCSZB~9}8$M

5K26Z6_NY{9@G~A(AVD}AFM

2.线性表的使用

A9{U_NPDPIWBIU@2P@S1LO1

4.串的使用

14`@]D9YD}~DK2C2PJ4X390

5.排序功能演示

_V5QJROD}JBI$38YD6M%)PM

0I(205P6J70U0D2)}_(2QTF

6.树的实现结果

W4%@CPXHI}YUYJ}S_KWK[FL

7.查找

@FLKR70IULEA107LV%@Q_PT

四:总结

      从此次课程设计中我学习到很多,极大的提升了自己编程能力,了解并掌握数据结构与算法的设计方法,学习到了初步的独立分析和设计能力; 初步了解到了软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;更重要的是提高自己综合运用所学的理论知识和方法独立分析和解决问题的能力;此外经过一周的课程设计我也接触到许多课程之外知识。比如,在编写函数之前要充分利用图书资源和网络资源;其次,应该更详细的考虑实际情况,才能使程序更加充分反映到自己所学内容,更具有简洁性,使阅读者一目了然。 

      通过这次课程设计练习,使我更深刻地理解了数据结构重要存储结构的的精髓,和开发软件过程中的过程。

五:参考文献:

 

更多相关推荐:
数据结构课程设计总结

课程设计说明书课程名:《数据结构课程设计》题目:一元多项式运算系统20##年1月一、课程认识数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数…

数据结构课程设计心得体会

程序设计心得体会做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅,我突然发现写程序还挺有意思的。由于上学期的C语言跟这学期的数据结构都算不上真正的懂,对于书上的稍微难点的知识就是是而非的,…

《数据结构课程设计报告》

安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称课题名称用三元组实现稀疏矩阵的转置相加相乘专业计算机科学与技术班级学号AA姓名AAA联系方式136XXXXXXXX指导教师武彬20年月日目录1数据结构课程设...

数据结构课程设计总结

课程设计总结一周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习,相互监督。…

数据结构课程设计报告(含代码)

西安郵電學院数据结构课程设计报告题目校园导航系统院系名称计算机学院专业名称计算机科学与技术班级学生姓名学号8位指导教师设计起止时间20xx年12月11日20xx年12月15日一设计目的1通过本次课程设计巩固数据...

数据结构课程设计报告

CENTRALSOUTHUNIVERSITY数据结构课程设计报告题目学生姓名指导教师学院专业班级完成时间交通旅游图的最短路径问题摘要数据结构主要是一门研究非数值计算的程序设计问题中的计算机操作对象以及它们之间的...

数据结构课程设计总结 (1)

《程序设计与数据结构》综合课程设计论文题目:程序设计与数据结构综合课程设计专业:计算机科学与技术班级:N计科12-1F姓名:学号:指导老师:一、课程认识数据结构课程主要是研究非数值计算的程序设计问题中所出现的计…

数据结构课程设计指导书

数据结构课程设计指导书主编软件工程教研室适用专业计算机科学与技术上海应用技术学院20xx年06月目录第一章第二章课程设计教学大纲2课程设计任务与要求31第一章课程设计教学大纲2第二章课程设计任务与要求一数据结构...

山东大学数据结构课程设计报告

数据结构课程设计报告构件标识系统学院软件学院专业软件工程年级姓名学号一系统开发平台11题目构件标识12开发工具VC6013语言C13操作系统WindowsXP或Windows7系统二系统规划21任务陈述图是由非...

数据结构课程设计

数据结构课程设计课程设计时间1014周周三下午及晚上一课程设计的目的数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科数据结构是介于数学计算机软件和计算机硬件之...

数据结构课程设计

数据结构课程设计说明肖波xiaobo一时间说明本学期到下学期五一之前完成即可期间如果提前完成随时可以发邮件给老师联系验收教三楼803房间Tel622830591007二课程设计验收说明验收时提交源程序报告电子版...

数据库课程设计 学生管理系统 总结报告

附表2漳州师范学院计算机科学与工程系数据库课程设计总结报告注:该表格由学生填写,内容采用小四号宋体。

数据结构课程设计总结(48篇)