求一份数据结构课程设计报告
//class CNode.h
#ifndef __CNODE_H__
#define __CNODE_H__
#include 《iostream》
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 “CNode.h“
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 “CLinkList.h“
#include “CNode.h“
CLinkList::CLinkList()
{
cout 《《 “这个是构造函数“《《 endl;
m_Head = &m_Node; //链表的头指针指向头结点
m_Node.SetNodeNext(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 “CNode.h“
CNode::CNode() //构造函数
{
//m_stStudent = {0};
m_Next = NULL;
}
CNode::~CNode() //析构函数
{
}
void CNode::SetNodeData()
{
char* pNumber = new char; //用来接收字符串的临时变量
char* pName = new char;
char* pAppearance = new char;
cout 《《 “学生学号: “ 《《 endl;
cin 》》 pNumber;
m_stStudent.m_strNumber = pNumber;
cout 《《 “姓名: “ 《《 endl;
cin 》》 pName;
m_stStudent.m_strName = pName;
cout 《《 “性别: “ 《《 endl;
cin 》》 m_stStudent.m_chSex;
cout 《《 “出生年月: “ 《《 endl;
cout 《《 “m_stData.m_nYear“ 《《 endl;
cin 》》 m_stStudent.m_stData.m_nYear;
cout 《《 “m_stData.m_nMonth“ 《《 endl;
cin 》》 m_stStudent.m_stData.m_nMonth;
cout 《《 “m_stData.m_nDay“ 《《 endl;
cin 》》 m_stStudent.m_stData.m_nDay;
cout 《《 “政治面貌: “ 《《 endl;
cin 》》 pAppearance;
m_stStudent.m_strAppearance = pAppearance;
cout 《《 “五门课成绩: “ 《《 endl;
cout 《《 “m_dSubject_1: “ 《《 endl;
cin 》》 m_stStudent.m_stResult.m_dSubject_1;
cout 《《 “m_dSubject_2: “ 《《 endl;
cin 》》 m_stStudent.m_stResult.m_dSubject_2;
cout 《《 “m_dSubject_3: “ 《《 endl;
cin 》》 m_stStudent.m_stResult.m_dSubject_3;
cout 《《 “m_dSubject_4: “ 《《 endl;
cin 》》 m_stStudent.m_stResult.m_dSubject_4;
cout 《《 “m_dSubject_5: “ 《《 endl;
cin 》》 m_stStudent.m_stResult.m_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_stStudent.m_strNumber.c_str(); //用来接收字符串的临时变量
const char* pName = m_stStudent.m_strNumber.c_str();
const char* pAppearance = m_stStudent.m_strAppearance.c_str();
cout 《《 “学生学号: “ 《《 pNumber 《《 ’\t’ 《《 “姓名: “ 《《 pName 《《 ’\t’ 《《 “性别: “ 《《 m_stStudent.m_chSex;
cout 《《 “出生年月: “ 《《 m_stStudent.m_stData.m_nYear 《《 ’,’ 《《 m_stStudent.m_stData.m_nMonth 《《 ’,’ 《《 m_stStudent.m_stData.m_nDay;
cout 《《 “政治面貌: “ 《《 pAppearance 《《 “五门课成绩: “ 《《 endl;
cout 《《 “m_dSubject_1: “《《 m_stStudent.m_stResult.m_dSubject_1《《 endl;
cout 《《 “m_dSubject_2: “《《 m_stStudent.m_stResult.m_dSubject_2《《 endl;
cout 《《 “m_dSubject_3: “《《 m_stStudent.m_stResult.m_dSubject_3《《 endl;
cout 《《 “m_dSubject_4: “《《 m_stStudent.m_stResult.m_dSubject_4《《 endl;
cout 《《 “m_dSubject_5: “《《 m_stStudent.m_stResult.m_dSubject_5《《 endl;
}
CNode* CNode::GetNodeNext()
{
return m_Next;
}
#include “CLinkList.h“
#include “CNode.h“
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; //指针置空
}
你的要求太多 , 没仔细看, 我把我给别人写的赋值给你吧 , 我已经写的很全了,程序有问题可以给我留言
数据结构和算法视频教程
我有一个Java教程。实际上,我学会了Java,数据结构不是问题!http://www.et.com.cn/eschool/zhuanti/java/
求数据结构C语言版严蔚敏(第四版)pdf 图上这本
展开所有强烈建议购买外国版本。数据结构(c 语言版本)由霍洛维茨等人翻译出版社: 中国机器出版社传统的内容和组织这类教材。层次分明,代码质量高。作者的教学经历,可以从该书的总体叙述中看出来。虽然有一定的难度,但作者从头到尾,都是从相关的基础知识,一步一步来的。(例如,c 的数据存储?),这是远远好于严伟民的。最重要的是,与严的教科书相比,书中的证明非常简洁。严的教科书是一场噩梦(例如,严的关于模式匹配的书)。
-数据结构课程设计总结