课程设计(论文)任务书
信息 学 院 计算机 专 业 20##-- 1 班
一、课程设计(论文)题目 基础软件设计
二、课程设计(论文)工作自2015 年12月28 日起至20##年1月8 日止。
三、课程设计(论文) 地点: 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;
}
三、测试数据:
结果测试:
页面初始化
各子菜单及其所含程序
部分功能执行情况:
1.栈的使用:
2.线性表的使用
4.串的使用
5.排序功能演示
6.树的实现结果
7.查找
四:总结
从此次课程设计中我学习到很多,极大的提升了自己编程能力,了解并掌握数据结构与算法的设计方法,学习到了初步的独立分析和设计能力; 初步了解到了软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;更重要的是提高自己综合运用所学的理论知识和方法独立分析和解决问题的能力;此外经过一周的课程设计我也接触到许多课程之外知识。比如,在编写函数之前要充分利用图书资源和网络资源;其次,应该更详细的考虑实际情况,才能使程序更加充分反映到自己所学内容,更具有简洁性,使阅读者一目了然。
通过这次课程设计练习,使我更深刻地理解了数据结构重要存储结构的的精髓,和开发软件过程中的过程。
五:参考文献: