期刊投稿百科

数据结构课程设计论文3000字

发布时间:2024-07-02 19:36:57

数据结构课程设计论文3000字

我正好在做课设,我把我的总结给你。数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。紧张的两周数据结构实训很快就过去了,通过这两周的实践学习,不仅使我们巩固了以前的知识并在此基础上还对数据结构的特点和算法有了更深的了解,使我们在这门课程的实际应用上也有了一个提高。 首先这两周的学习,使我们在巩固了原有的理论知识上,又培养了灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我们体会到自身知识和能力在实际中的应用和发挥。其次,它激发了我们创新意识,开发创造的能力和培养沟通能力。另外,让我们进一步熟悉了数据结构的设计应用。每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我们数据结构的学习和提高很有益处,并且使我们明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,通过在编译环境中的编译与调试,可到最终的程序。最后,在这次的实训过程中,我们深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。在两周的实训中,我们也体会到了团队合作的重要性,从最初的查阅资料到最后的程序的成功运行,我们组有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。两个礼拜的时间我们经历了很多,也收获了很多。与其说这次的实训是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。总之,两个礼拜的课程设计让我们受益匪浅。我们深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功。

已经发到你邮箱了。记得给分。

//class CNh#ifndef __CNODE_H__#define __CNODE_H__#include using namespace std;struct stData //出生年月结构{ int m_nYear; int m_nMonth; int m_nDay;};struct stResult //五门课成绩结构{ double m_dSubject_1; //自己改成绩的名称 double m_dSubject_2; double m_dSubject_3; double m_dSubject_4; double m_dSubject_5;};struct stStudent //声明学生信息的结构{ string m_strNumber; //学生学号 string m_strName; //姓名 char m_chSex; //性别 struct stData m_stData; //出生年月 string m_strAppearance; //政治面貌 struct stResult m_stResult; //五门课成绩};typedef class CNode{ private: struct stStudent m_stStudent; CNode* m_Next; public: CNode(); //构造函数 ~CNode(); //析构函数 void SetNodeData(); //设置结点内容的函数成员 stStudent GetNodeData(); //获取结点内容的函数成员 void SetNodeNext(CNode* _Next); //设置结点Next指针的函数成员 void ShowNodeData(); //输出结点内容的函数成员 CNode* GetNodeNext(); //获取结点Next指针的函数成员}LinkNode;#endif//class CLinkList#ifndef __CLINKLIST_H__#define __CLINKLIST_H__ #include "CNh"typedef class CLinkList{ private: LinkNode* m_Head; //链表的头指针 LinkNode m_Node; //链表的头结点 public: CLinkList(); //构造函数 ~CLinkList(); //析构函数 void CreateList(); //初始化链表的函数成员 LinkNode* GetListNode(int _nIndex); //按位置查找指定位结点的成员函数 void InsertList(int _nIndex); //插入结点的成员函数 void DeleteList(int _nIndex); //删除某一结点的成员函数 LinkNode* GetHeadList(); //获取头指针的成员函数 void SetListData(int _nIndex); //设置链表中某一结点的值的成员函数 void ShowListData(int _nIndex); //这个是现实链表中某一结点值的函数成员 void DestroyList(int _nIndex); //销毁某一位置以后链表的成员函数 void ShowList(); //显示链表的成员函数}LinkList;#endif//class CLinkList#include "CLinkLh"#include "CNh"CLinkList::CLinkList() { cout << "这个是构造函数"<< endl; m_Head = &m_Node; //链表的头指针指向头结点 m_NSetNodeNext(NULL); //将头结点的Next指针设置为NULL;}CLinkList::~CLinkList(){ cout << "这个是析构函数" << endl;}void CLinkList::CreateList() //以向后追加的方式创建一个链表,输入0退出{ int nTemp = 0; //定义一个临时变量用于标志程序结束 cout << "欢迎来创建链表 !" << endl; CNode * pTemp = NULL; //定义一个临时结点指针,用来增加新结点用 CNode * pNode = m_Head; //定义一个标记指针,首先叫其指向头结点 while(1) { pTemp = new LinkNode; cout << "请输入下一个结点的内容!" << endl; pTemp->SetNodeData(); //设置链表中结点的内容 cout << "如果想继续输入下一个学生的信息请输入 1,否则输入 0" << endl; cin >> nTemp; if ('0' == nTemp) { break; } pNode->SetNodeNext(pTemp); //让链尾的Next指向新建的结点 pNode = pTemp; //将结尾元素向后移 } cout << "创建链表结束" << endl;}LinkNode* CLinkList::GetListNode(int _nIndex){ cout << "这个是按位置查找指定位结点的成员函数" << endl; LinkNode* pNode = m_Head->GetNodeNext(); //定义一个临时的结点指针,初始化指向头结点 int Temp = 0; //定义一个临时的变量,用来标记已检查结点的个数的 if(-1 == _nIndex) //返回头结点(即头指针) { return m_Head; } if(_nIndex < -1) //_nIndex控制条件 { cout << "您输入的是错误的位置!" << endl; return 0; } while(pNode != NULL) { if(_nIndex == Temp) { return pNode; } pNode = pNode->GetNodeNext(); //临时结点向后移动 ++Temp; } return pNode; //没找到结点就返回NULL}void CLinkList::ShowListData(int _nIndex);void CLinkList::InsertList(int _nIndex) //插入结点的函数成员{ cout << "这个是插入结点的成员函数" << endl; LinkNode* pNode = GetListNode(_nIndex - 1); //定义一个结点类的指针,指向的是要插入位置的前一指针 LinkNode* pTemp = new CNode; //定义一个临时结点指针,用来增加新结点用 pTemp->SetNodeData(); //设置插入结点的内容 pTemp->SetNodeNext(pNode->GetNodeNext()); pNode->SetNodeNext(pTemp); }void CLinkList::DeleteList(int _nIndex){ cout << "这个是删除某一结点的成员函数" << endl; LinkNode* pNode = GetListNode(_nIndex - 1); //定义一个结点类的指针,指向的是要删除位置的前一指针 LinkNode* pTemp = NULL; //定义一个临时结点指针,用来指向要删除的结点 pTemp =pNode->GetNodeNext(); //把pTemp指向要删除的结点 pNode->SetNodeNext(pTemp->GetNodeNext()); //把pNode指向要删除的结点的后一个结点 delete pTemp; //删除结点 pTemp = NULL; }LinkNode* CLinkList::GetHeadList(){ cout << "这个是获取头指针的成员函数" << endl; return m_Head;}void CLinkList::SetListData(int _nIndex){ cout << "这个是设置链表中某一结点的值的成员函数" << endl; CNode *pNode = GetListNode(_nIndex); //定义一个结点类的指针,指向的是要修改内容位置的结点 pNode->SetNodeData(); //修改内容}void CLinkList::ShowListData(int _nIndex){ cout << "这个是显示链表中某一结点值的成员函数" << endl; CNode *pNode = GetListNode(_nIndex); //定义一个结点类的指针,指向的是要获取内容位置的结点 pNode->ShowNodeData(); //返回想要得到位置的结点内容}void CLinkList::DestroyList(int _nIndex) { cout << "这个是销毁某一位置以后链表的成员函数" << endl; LinkNode* pTemp = GetListNode(_nIndex - 1); //定义一个结点指针,指向要销毁位置的前一结点 LinkNode* pNode = pTemp->GetNodeNext(); //定义一个结点指针,指向要销毁位置的结点 while(pTemp->GetNodeNext() != NULL) //销毁动作的结束条件或初始条件 { pTemp->SetNodeNext(pNode->GetNodeNext()); //把需要销毁的位置的前结点的Next指向销毁位置的下一个结点 delete pNode; //销毁结点 pNode = pTemp->GetNodeNext(); //把pNode重新指向要销毁位置的结点 }} void CLinkList::ShowList(){ cout << "这个是显示链表的成员函数" << endl; int nTemp = 0; //定义一个临时的整形变量用来控制输入的个数 LinkNode* pTemp = m_Head->GetNodeNext(); //定义一个结点类指针,指向第0位的结点 if(NULL == pTemp) { cout << "这是个空链" << endl; } while(pTemp != NULL) { pTemp->ShowNodeData(); ++nTemp; if(0 == nTemp % 5 && nTemp != 0) //控制每行只能输出5个结点的内容 { cout << endl; } pTemp = pTemp->GetNodeNext(); }}//class CNode#include "CNh"CNode::CNode() //构造函数 { //m_stStudent = {0}; m_Next = NULL;}CNode::~CNode() //析构函数{}void CNode::SetNodeData(){ char* pNumber = new char[30]; //用来接收字符串的临时变量 char* pName = new char[30]; char* pAppearance = new char[30]; cout << "学生学号: " << endl; cin >> pNumber; m_stS_strNumber = pNumber; cout << "姓名: " << endl; cin >> pName; m_stS_strName = pName; cout << "性别: " << endl; cin >> m_stS_chSex; cout << "出生年月: " << endl; cout << "m_stD_nYear" << endl; cin >> m_stS_stD_nYear; cout << "m_stD_nMonth" << endl; cin >> m_stS_stD_nMonth; cout << "m_stD_nDay" << endl; cin >> m_stS_stD_nDay; cout << "政治面貌: " << endl; cin >> pAppearance; m_stS_strAppearance = pAppearance; cout << "五门课成绩: " << endl; cout << "m_dSubject_1: " << endl; cin >> m_stS_stR_dSubject_1; cout << "m_dSubject_2: " << endl; cin >> m_stS_stR_dSubject_2; cout << "m_dSubject_3: " << endl; cin >> m_stS_stR_dSubject_3; cout << "m_dSubject_4: " << endl; cin >> m_stS_stR_dSubject_4; cout << "m_dSubject_5: " << endl; cin >> m_stS_stR_dSubject_5; delete []pNumber; //释放内存 pNumber = NULL; //指针置空 delete []pName; //释放内存 pName = NULL; delete []pAppearance; //释放内存 pAppearance = NULL; }stStudent CNode::GetNodeData() //返回结点内容(即学生信息){ return m_stStudent;}void CNode::SetNodeNext(CNode* _Next){ m_Next = _Next;}void CNode::ShowNodeData(){ const char* pNumber = m_stS_strN_str(); //用来接收字符串的临时变量 const char* pName = m_stS_strN_str(); const char* pAppearance = m_stS_strA_str(); cout << "学生学号: " << pNumber << '/t' << "姓名: " << pName << '/t' << "性别: " << m_stS_chSex; cout << "出生年月: " << m_stS_stD_nYear << ',' << m_stS_stD_nMonth << ',' << m_stS_stD_nDay; cout << "政治面貌: " << pAppearance << "五门课成绩: " << endl; cout << "m_dSubject_1: "<< m_stS_stR_dSubject_1<< endl; cout << "m_dSubject_2: "<< m_stS_stR_dSubject_2<< endl; cout << "m_dSubject_3: "<< m_stS_stR_dSubject_3<< endl; cout << "m_dSubject_4: "<< m_stS_stR_dSubject_4<< endl; cout << "m_dSubject_5: "<< m_stS_stR_dSubject_5<< endl;}CNode* CNode::GetNodeNext(){ return m_Next;}#include "CLinkLh"#include "CNh"void Text(); //测试函数声明int main(){ cout << "这是mian函数" << endl; Text(); return 0;}void Text(){ cout << "这个是测试函数" << endl; LinkList* pList = new LinkList; //创建一个内存链表对象 cout << "------------------CreateList-----------------------------" << endl; pList->CreateList(); //初始化链表的函数成员 pList->ShowList(); cout << endl; cout << "------------------GetListNode-----------------------------" << endl; LinkNode* pNode = NULL; //定义一个临时的结点类指针用于检测查找函数成员 pNode = pList->GetListNode(3); //按位置查找指定位结点的成员函数的测试 if(pNode) { cout << "用按位置查找的方法找到了指定位结点" << endl; } else { cout << "对不起,用按位置查找的方没有找到指定位结点" << endl; } cout << endl; cout << "------------------InsertList-----------------------------" << endl; pList->InsertList(0); //插入结点的成员函数的测试 pList->ShowList(); cout << endl; cout << "------------------DeleteList-----------------------------" << endl; pList->DeleteList(0); //删除某一结点的成员函数的测试 pList->ShowList(); cout << endl; cout << "------------------GetHeadList-----------------------------" << endl; pNode = NULL; pNode = pList->GetHeadList(); //获取头指针的成员函数的测试 if(pNode) { cout << "已经返回了头指针" << endl; } else { cout << "对不起,头指针为空" << endl; } cout << endl; cout << "------------------GetHeadList-----------------------------" << endl; pList->SetListData(3); //设置链表中某一结点的值的成员函数的测试 pList->ShowList(); cout << endl; cout << "------------------GetListData-----------------------------" << endl; cout << "pList->ShowListData(3) ="; pList->ShowListData(3); //获取链中某一结点值的成员函数的测试 cout << endl; cout << "------------------DestroyList(3)-----------------------------" << endl; pList->DestroyList(3); //销毁第3位置以后链表的成员函数的测试 pList->ShowList(); cout << endl; cout << "------------------DestroyList(0)-----------------------------" << endl; pList->DestroyList(0); //销毁第0位置以后链表的成员函数的测试 pList->ShowList(); cout << endl; delete pList; //释放内存 pList = NULL; //指针置空}你的要求太多 , 没仔细看, 我把我给别人写的赋值给你吧 , 我已经写的很全了,程序有问题可以给我留言

数据结构课程设计论文

.问题的描述: 要求给定m〔最大为20〕个字符的出现频率,得到这m个字符的HaffMan编码。 任意一个字符序列,得到一个二进制编码序列。对该编码序列进行译码,得到原来的字符序列。二.算法的设计 解决该问题首先要建立haffman树,对叶子结点赋值。文字译码过程:先检索到叶子,然后用一个数组记录从叶子到根的路径(左0右1) 然后采用“先进后出”原则输出数组元素密码译文过程:根据左0右1做到密码对应的叶子结点,输出结点所存字符。三.数据结构的设计结点的设计 struct Htnode{int ww;int parent,llink,rlink;char word;};树结构:struct Httree{struct Htnode ht[MAXNODE];int root;};typedef struct Httree *PHttree;四.程序(主要部分)PHttree huffman(int m,int *w){PHttree pht;int i,j,x1,x2,m1,m2;pht=(PHttree) malloc(sizeof(struct Httree));if (pht==NULL){printf("out of space!!");return pht;}for (i=0;i2*m-1;i++){pht->ht[i]llink=-1;pht->ht[i]link=-1;pht->ht[i]parent=-1;if(im){pht->ht[i]ww=w[i];pht->ht[i]word='a'+i;}else{pht->ht[i]ww=-1;pht->ht[i]word=0;}}for(i=0;im-1;i++){m1=MAXINT;m2=MAXINT;x1=-1;x2=-1;for(j=0;jm+i;j++)if (pht->ht[j]wwm1&&pht->ht[j]parent==-1){m2=m1;x2=x1;m1=pht->ht[j]ww;x1=j;}else if(pht->ht[j]wwm2&&pht->ht[j]parent==-1){m2=pht->ht[j]ww;百年天地回元气 一统山河际太平 国泰民安

好像没有数据结构的 你试试c++语言面向对象程序设计课程设计 这个网站能免费下几个,不能免费下的就要收费了本站免费计算机课程设计论文下载本人原创计算机类课程设计免费下载,销售计算机毕业论文请把我的网站介绍给同学们谢谢支持本站ACCESS课程设计库存管理工资管理系统 sqlserver数据库课程设计 c++语言面向对象程序设计课程设计 vb课程设计学生成绩系统asp留言板(没有论文) 计算机实训计算机组装与维护课程设计简单的网页设计没有论文 office课程设计 操作系统课程设计另有以上没有列出的计算机课程设计为收费材料30元一份 更多

这些我倒都作过,你要的话可以发给你,我用的是VC++编的,我的QQ:530368659,请注明数据结构。

//---------------------------------------------------------------------------#include #include #define DATASTYLE "%d " /*结点数据成员的数据类型对应的格式控制符*/typedef int datatype; /*结点数据成员的数据类型*/typedef struct node{ /*树结点的数据结构*/ datatype data; struct node *left,*right;} node;node *insert(node *a,datatype d) /*将d插入到a指向的树中,返回插入元素后的树*/{ node *t=NULL; if (a==NULL) { /*如果当前树为空,就创建一个新结点*/ t=malloc(sizeof(node)); t->data=d; t->left=t->right=NULL; } else if (d>a->data) { /*如果树不空,并且d大于当前结点,则将d插入到当前结点的右子树*/ a->right=insert(a->right,d); t=a; } else if (d<=a->data) { /*如果树不空,并且d小于当前结点,则将d插入到当前结点的左子树*/ a->left=insert(a->left,d); t=a; } return t;}void prttree(node *r) /*中序遍历输出排序二叉树*/{ if (r) { prttree(r->left); printf(DATASTYLE,r->data); prttree(r->right); }}void Free(node *r) /*利用后序遍历算法删除二叉树*/{ if (r) { Free(r->left); Free(r->right); free(r); }}int main(int argc, char* argv[]){ datatype a[10]={1,9,2,8,3,7,4,6,5,0}; int i; node *root=NULL; for (i = 0; i < 10; i++) /*将a数组中的10个整数插入到root二叉树中*/ { printf(DATASTYLE,a[i]); root=insert(root,a[i]); } putchar('/n'); prttree(root); Free(root); return 0;}//---------------------------------------------------------------------------

数据结构课程设计论文范文

晕/////真麻烦。。。。。数据结构实习报告规范 实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容: 1、需求分析 以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定: (1)输入的形式和输入值的范围; (2)输出的形式; (3)程序所能达到的功能; (4)测试数据:包括正确地输入及其输出结果和含有错误的输入及其输出结果。 2、概要设计 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 3、详细设计 实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。 4、调试分析 内容包括: (1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; (2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进思想; (3)经验和体会等。 5、用户使用说明 说明如何使用你编写的程序,详细列出每一步操作步骤。 6、测试结果 列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。 7、附录 题 目 : [数据结构] 约瑟夫-实习报告 尺 寸 : 约瑟夫-实习报告doc 目 录 : 一、需求分析 二、概要设计 三、程序具体设计及函数调用关系 四、调试分析 五、测试结果 原 文 : 实习报告 题目:约瑟夫(Joseph)问题的一种描述是:编号为1,2,,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个开始重新从1报数,如此下去,直至年有人全部出列为止。试设计一个程序求出出列顺序。 班级: 姓名: 学号: 完成日期: 一、需求分析 1. 本演示程序中,利用单向循环链表存储结构存储约瑟夫环数据(即n个人的编号和密码)。 2. 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示"提示信息"之后,由用户在键盘上输入演示程序中需要输入的数据,运算结果显示在其后。 3. 程序执行的命令包括: 1)构造单向循环链表;2) 4. 测试数据 m 的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序为6,1,4,7,2,1,3,5)。 二、概要设计 1.单向循环链表的抽象数据类型定义为: ADT List{ 数据对象:D={ai | ai∈正整数,I=1,2,,n,n≥0} 数据关系:R1={< ai-1,ai > |,ai-1,ai∈D,I=1,2,,n} 基本操作: Init List(&L) 操作结果:构造一个空的线性表L。 List Insert(&L,i,e) 初始条件:线性表L已存在,1≤i≤List Length(L)+ 操作结果:在L中第i个位置之前插入新的数据无素e,L长度加1。 List Delete(&L,i,&e) 初始条件:线性表L存在非空,1≤i≤List Length(L) 操作结果:删除L的第i个元素,并用e返回其值,L长度减1。 2. 程序包含四个模块: 1)主程序模块:

#include "h"#include "iostream"using namespace std;#define MAXSIZE 10typedef struct{int xi;int zhi;}DataType;typedef struct node{DataType data[MAXSIZE];int length;}Dx,*PDx;PDx Init_List(){Dx *S;S=(Dx *)malloc(sizeof(Dx));if(S) S->length=0;return S;}int Empty(Dx *S){if(S->length==0) return 1;else return 0;}int In_list(Dx *S,DataType a)//建立多项式存储结构{if(S&&S->lengthlength++; S->data[S->length-1]=a; return 1;}else return 0;}int Insert_list(Dx *S,int j,DataType e)//插入{if(S&&S->lengthlength++; for(int i=S->length-1;i>j;i--) S->data[i]=S->data[i-1]; S->data[j]=e; return 1;}else return 0;}int Delete_list(Dx *S,int m)//m就是数组下标{ if(!S){ cout<<"多项式不存在!"<S->length){ cout<<"删除位置不合法!"<length;j++) S->data[j-1]=S->data[j];S->length--;return 1;}PDx Luru(int n)//录入多项式,并存储起来,n为多项式的项数!{Dx *S;S=Init_List();DataType e;cout<<"按从高指数到低指数,输入一元多项式的系数和指数;"<>zhi; if((S->length-1>=0&&zhi>=S->data[S->length-1]zhi)||zhi<0) { i--; cout<<"输入指数大于前一项错误请重输或小于0!"<>xi; In_list(S,e);}return S;}void print(Dx *S){for(int i=0;ilength;i++){ if(i>0&&S->data[i]xi>=0) cout<<"+"; cout<data[i]xi<<"X^"<data[i]zhi;}cout<length;x++){ S3->length++; S3->data[S3->length-1]=S1->data[x];}for(int i=0;ilength;i++){ for(int j=0;jlength;j++) { if(S2->data[i]zhi==S3->data[j]zhi) { S3->data[j]xi+=S2->data[i]xi; break; } else if(S2->data[i]zhi>S3->data[j]zhi) { Insert_list(S3,j,S2->data[i]); break; } } if(S2->data[i]zhidata[S3->length-1]zhi) { In_list(S3,S2->data[i]); }}return S3;}PDx Sub(Dx *S1,Dx *S2)//S1-S2{Dx *S3;S3=Init_List();DataType e;for(int x=0;xlength;x++){ S3->length++; S3->data[S3->length-1]=S1->data[x];}for(int i=0;ilength;i++){ for(int j=0;jlength;j++) { if(S2->data[i]zhi==S3->data[j]zhi) { S3->data[j]xi-=S2->data[i]xi; if(S3->data[j]xi==0) Delete_list(S3,j+1); break; } else if(S2->data[i]zhi>S3->data[j]zhi) { e=S2->data[i]; xi=-1*xi; Insert_list(S3,j,e); break; } } if(S2->data[i]zhidata[S3->length-1]zhi) { e=S2->data[i]; xi=-1*xi; In_list(S3,e); } }return S3;}PDx Bin(Dx *S1,Dx *S2){Dx *S3;S3=Init_List();DataType e,a;xi=0;zhi=0;In_list(S3,a);for(int i=0;ilength;i++) for(int j=0;jlength;j++) { xi=S1->data[i]xi*S2->data[j]xi; zhi=S1->data[i]zhi*S2->data[j]zhi; for(int k=0;klength;k++) { if(zhi==S3->data[k]zhi) { S3->data[k]xi+=S2->data[j]xi; break; } else if(zhi>S3->data[k]zhi) { Insert_list(S3,k,e); break; } if(S3->length-2>=0&&zhidata[S3->length-2]zhi) { Insert_list(S3,S3->length-1,e); } } }return S3; }int _tmain(int argc, _TCHAR* argv[]){Dx *S1,*S2,*S3,*S4,*S5;int i,j;cout<<"要录入的1多项式项数:";cin>>i;S1=Luru(i);cout<<"要录入的2多项式项数:";cin>>j;S2=Luru(j);S3=Add(S1,S2);S4=Sub(S1,S2);S5=Bin(S1,S2);cout<<"第一个多项式:"<

这些我倒都作过,你要的话可以发给你,我用的是VC++编的,我的QQ:530368659,请注明数据结构。

这个我也提问过 就是没人给回复。。。祝楼主好运吧

数据结构课程设计论文摘要

Huffman 编码一、实验目的熟悉Huffman编码方法。了解并弄懂Huffman编码实现信息的无损压缩原理。二、实验要求 熟悉C语言编程。三、实验内容根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti中只有一个带树为Ti的根结点在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置其根结点的权值为其左右子树权值之和在F中删除这两棵树,同时将新得到的二叉树加入F中重复2, 3,直到F只含一棵树为止四、实验步骤1.用C语言实现二叉树的说明2.输入n个权值,并生成n个二叉树3.对n个二叉树逐步生成Huffman树4.对Huffman树的每个叶子结点生成编码附:实验程序#include #define M 10#define MAX 100typedef struct{ int data; int pa,lc,rc;}JD;void huffman(int n,int w[],JD t[]){ int i,j,k,x1,x2,m1,m2; for(i=1;i<(2*n);i++) { t[i]pa=t[i]lc=t[i]=0; if(i<=n) t[i]data=w[i-1]; else t[i]data=0; } for(i=1;i

#include "h"#define MAX 30000/* 函数声明区 */int SequenceSearch(int e[], int len, int key);int BinarySearch(int e[], int len, int key);void StraightInsertSort(int e[], int len);void QuickSort(int e[], int first, int end);void MergeSort(int e[],int a[],int first,int end);void HeapSort(int e[],int len);void Print(int e[], int len, int cols);/* 全局变量区 */long compare; /* 比较次数 */long move; /* 移动次数 */void main(){    int i;    int n;    int table[MAX], table1[MAX];    int key;    int pos;    int choice;    int cols = 10;        system("cls");    printf("***********************************************************/n");    printf("INITIALIZE TABLE/n");    printf("n = ");    scanf("%d", &n);        srand(time(NULL));    for(i=0; ie[mid]) low=mid+1; else high=mid-1; } ++compare; return  -1;}/*    直 接 插 入 排 序    */void StraightInsertSort(int e[], int len){ int i,j,temp; for(i=1; i=0; j--) { if(++compare && e[j] > temp) { e[j+1]=e[j]; ++move; } else break; } e[j+1]=temp; ++move; }}/*    快  速  排  序    */void QuickSort(int e[], int first, int end){ int i=first,j=end,temp=e[first]; while(i=temp) j--; e[i]=e[j]; ++move; while(++compare && ii+1) QuickSort(e,i+1,end);}/*    归  并  排  序    */void MergeSort(int e[],int a[],int first,int end){ void Merge(int e[],int a[],int first,int m,int end); int m; int bak[MAX]; if(first==end) a[first]=e[first]; else { m=(first+end)/2; MergeSort(e,bak,first,m); MergeSort(e,bak,m+1,end); Merge(bak,a,first,m,end); } for(m=0;m<=end;m++) e[m]=a[m];}void Merge(int e[],int a[],int first,int m,int end){ int i=first,j=m+1,k=first; while(i<=m && j<=end) { ++compare; ++move; if(e[i]<=e[j]) a[k++]=e[i++]; else a[k++]=e[j++]; } while(i<=m && ++move) a[k++]=e[i++]; while(j<=end && ++move) a[k++]=e[j++];}/*    堆   排   序     */void HeapSort(int e[],int len){ void sift(int e[],int l,int m); int i,temp; for(i=len/2-1;i>=0;i--) sift(e,i,len); for(i=len-1;i>=1;i--) { move += 2; temp=e[i]; e[i]=e[0]; e[0]=temp; sift(e,0,i-1); }}void sift(int e[],int l,int m){ int i,j,x; i=l; j=2*i+1; x=e[i]; while(j<=m) { if(j

数据结构课程设计论文题目

到新华书店买本书啊。

//1、 单链表的操作#include #include typedef struct _LINK{ int n; struct _LINK *next;}LINK;LINK *head = NULL;LINK *tail = NULL;void print(){ LINK *p = head; printf(">>>现在的链表为:"); if(head) { while(p) { printf("%d ", p->n); p = p->next; } } else { printf("空"); } printf("/n");}void addData(int n){ if(head && tail) { LINK *p = (LINK*)malloc(sizeof(LINK)); p->n = n; p->next = NULL; tail->next = p; tail = p; } else if(head == NULL) { head = (LINK*)malloc(sizeof(LINK)); head->n = n; head->next = NULL; tail = head; } else { // Error } print();}void insertData(int n, int d){ LINK *p = head; while(p) { if(--d > 0) { p = p->next; } else if(d == 0) { LINK *q = (LINK*)malloc(sizeof(LINK)); q->n = n; q->next = p->next; p->next = q; break; } else { break; } } if(p) { print(); } else { printf("【错误的序号,请重新输入】/n"); }}void delData1(int d){ LINK *p; LINK *q; if(head) { q = head; p = q->next; } else { printf("【空序列】/n"); return; } if(--d == 0) { head = head->next; free(q); print(); return; } while(d && p) { if(--d > 0) { q = p; p = q->next; } else if(d == 0) { q->next = p->next; if(p == tail) { tail = q; } free(p); break; } else { break; } } if(d == 0) { print(); } else { printf("【错误的序号,请重新输入】/n"); }}void delData2(int n){ LINK *p; LINK *q; if(head) { q = head; p = q->next; } else { printf("【空序列】/n"); return; } if(head->n == n) { head = head->next; free(q); print(); return; } while(p) { if(p->n == n) { q->next = p->next; if(p == tail) { tail = q; } free(p); break; } else { q = q->next; p = q->next; } } if(p) { print(); } else { printf("【该数据不存在】/n"); }}void searchData(int n){ int d = 0; LINK *p = head; while(p) { ++d; if(p->n == n) { break; } else { p = p->next; } } if(p) { printf("【该数据位于第%d个数据】/n", d); } else { printf("【该数据不存在】/n"); }}void delLink(){ LINK *p = head; LINK *q = p; while(p) { p = q->next; free(q); q = p; } head = tail = NULL;}int main(){ int cmd = 0; int n, d; do { printf("======================/n"); printf("【请选择操作:】/n"); printf("1:添加数据/n"); printf("2:插入数据/n"); printf("3:按序号删除数据/n"); printf("4:按数值删除数据/n"); printf("5:查找数据/n"); printf("0:退出程序/n"); printf("======================/n"); scanf("%d", &cmd); switch(cmd) { case 1: printf("【请输入要添加的数据】/n"); scanf("%d", &n); addData(n); break; case 2: printf("【请输入要插入数据的序号】/n"); scanf("%d", &d); printf("【请输入要添加的数据】/n"); scanf("%d", &n); insertData(n, d); break; case 3: printf("【请输入要删除的数据的序号】/n"); scanf("%d", &d); delData1(d); break; case 4: printf("【请输入要删除的数据的数值】/n"); scanf("%d", &n); delData2(n); break; case 5: printf("【请输入要查找的数值】/n"); scanf("%d", &n); searchData(n); break; case 0: continue; default: printf("【错误的选项,请重新输入】/n"); continue; } }while(cmd != 0); delLink(); return 0;}

#include#include#include#includestruct contacks{ char name[10]; char street[20]; char city[10]; int eip; char state[10]; }con[50];int k=0;void enter();void display();void lookandchange();void del();void save();void main(){int a; do {printf("/n/n ******************************************************************/n"); printf(" *"); printf("/t/twelcome enter the contacks system"); printf("/t*"); printf("/n ******************************************************************/n"); printf(" *"); printf("/t Access information"); printf("/t/t/t/t/t*/n"); printf(" *"); printf("/t display information"); printf("/t/t/t/t*/n"); printf(" *"); printf("/t lookandchange information"); printf("/t/t/t/t*/n"); printf(" *"); printf("/t Delete information"); printf("/t/t/t/t/t*/n"); printf(" *"); printf("/t Save the information"); printf("/t/t/t/t*/n"); printf(" *"); printf("/t exit "); printf("/t/t/t/t/t*/n"); printf(" ******************************************************************/n"); printf(" Enter you choice : "); scanf("%d",&a); switch(a) { case 1:printf("/n");enter();break; case 2:printf("/n");display();break; case 3:printf("/n");lookandchange();break; case 4:printf("/n");del();break; case 5:printf("/n");save();break; case 6:printf("/n");exit(0);break; default:printf("/nThe choice is between 1 to /n"); } }while(a!=0); } void enter(){ char ch[20];printf("/nenter student information:/n");do{ printf("/nname: "); scanf("%s",con[k]ame); printf("street: "); scanf("%s",con[k]street); printf("/ncity: "); scanf("%s",con[k]ity); printf("/neip: "); scanf("%d",&con[k]ip); printf("/nstate: "); scanf("%s",con[k]state); k++; printf("/nif want continue input student information(y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0); display();}void display(){ int i; printf(" the information is:/n"); for(i=0;i

相关百科
热门百科
首页
发表服务