c++设计线性表类模板,用以下主函数测试:

作者&投稿:皮科 (若有异议请与网页底部的电邮联系)
C++设计一个类模板,要求在main函数中使用~

建议你看看谭浩强的一本《C++程序设计》,还算不错

关键看你的线性表是怎么存的;
看你的程序是不是链表头head之后还挂一个节点不做为学生节点,而是作为统计节点;
p1->num,是不是记录学生个数的;如果是我描述的样子,那么这个判断就是正确的;

#include <vector>
#include <string>
#include <iostream>

using namespace std;

class Student
{
public:
Student();
void setName(const string& strName);
void setId(const string& id);
void setmath(int math);
void setEng(int eng);
void setC(int c);
bool operator < (const Student& stu);
bool operator == (const Student& stu);
bool operator > (const Student& stu);

friend ostream& operator << (ostream& ost, const Student& stu);

private:
string m_strName;
string m_strId;
int m_iMath;
int m_iEnglish;
int m_iChinese;
};

Student::Student(): m_strName(""), m_strId(""), m_iMath(0), m_iEnglish(0), m_iChinese(0)
{
}

void Student::setName(const string& strName)
{
m_strName = strName;
}

void Student::setId(const string& id)
{
m_strId = id;
}

void Student::setmath(int math)
{
m_iMath = math;
}

void Student::setEng(int eng)
{
m_iEnglish = eng;
}

void Student::setC(int c)
{
m_iChinese = c;
}

ostream& operator << (ostream& ost, const Student& stu)
{
ost << "Name: " << stu.m_strName << endl;
ost << "ID: " << stu.m_strId << endl;
ost << "Math: " << stu.m_iMath << endl;
ost << "English: " << stu.m_iEnglish << endl;
ost << "Chinese: " << stu.m_iChinese << endl << endl;
return ost;
}

bool Student::operator <(const Student& stu)
{
int thisTotal = m_iChinese+m_iEnglish+m_iMath;
int stuTotal = stu.m_iChinese+stu.m_iEnglish+stu.m_iMath;
return (thisTotal<stuTotal);
}

bool Student::operator >(const Student& stu)
{
int thisTotal = m_iChinese+m_iEnglish+m_iMath;
int stuTotal = stu.m_iChinese+stu.m_iEnglish+stu.m_iMath;
return (thisTotal>stuTotal);
}

bool Student::operator ==(const Student& stu)
{
int thisTotal = m_iChinese+m_iEnglish+m_iMath;
int stuTotal = stu.m_iChinese+stu.m_iEnglish+stu.m_iMath;
return (thisTotal==stuTotal);
}

template<typename T, int size>
class SeqList
{
public:
SeqList();
void insertOrdAsc(const T& t);
bool insert(const T& t);
void show();
void Remove(const T& t);
void Sort();
int find(const T& t);

private:
T m_context[size];
int m_size;
};

template<typename T, int size>
SeqList<T, size>::SeqList()
{
m_size = 0;
}

template<typename T, int size>
void SeqList<T, size>::insertOrdAsc(const T& t)
{
if (0 == m_size)
{
m_context[0] = t;
m_size++;
}
else
{
int iIndex;
for (iIndex = 0; iIndex < m_size; iIndex++)
{
if (m_context[iIndex] < t)
{
break;
}
}
for (int i = m_size; i > iIndex; i--)
{
m_context[i] = m_context[i-1];
}
m_context[iIndex] = t;
m_size++;
}
}

template<typename T, int size>
bool SeqList<T, size>::insert(const T& t)
{
if (m_size < 10)
{
m_context[m_size] = t;
m_size++;
return true;
}
else
{
return false;
}
}

template<typename T, int size>
void SeqList<T, size>::show()
{
for (int i = 0; i < m_size; i++)
{
cout << m_context[i];
}
}

template<typename T, int size>
int SeqList<T, size>::find(const T &t)
{
for (int i = 0; i < m_size; i++)
{
if (m_context[i] == t)
{
return i;
}
}
return -1;
}

template<typename T, int size>
void SeqList<T, size>::Remove(const T &t)
{
int iIndex;
for (iIndex = 0; iIndex < m_size; iIndex++)
{
if (m_context[iIndex] == t)
{
break;
}
}
for (int i = iIndex; i < m_size-1; i++)
{
m_context[i] = m_context[i+1];
}
m_size--;
}

template<typename T, int size>
void SeqList<T, size>::Sort()
{
T temp;
for (int i = 0; i < m_size-1; i++)
{
for (int j = i+1; j < m_size; j++)
{
if (m_context[i] < m_context[j])
{
temp = m_context[i];
m_context[i] = m_context[j];
m_context[j] = temp;
}
}
}
}

int main(){
SeqList<int,10> list; //构造整数空表
SeqList<Student,10>slist; //构造学生对象空表
int k;
int a, key; //整数数据、关键字
Student stu; //学生
string id, name; //学号、姓名
int m,e,c; //三门课成绩
for(int i=0;i<6;i++)
{
cin>>a;
list.insertOrdAsc(a); //调用插入函数生成数据升序表
}
list.show();
cout<<endl;

for(int i=0;i<5;i++)
{
cin>>id>> name>> m>> e>> c; //读入学生信息
stu.setName(name); //学生对象获得值
stu.setId(id);
stu.setmath(m);
stu.setEng(e);
stu.setC(c);
slist.insert (stu); //学生信息插入表中,形成无序表
}
slist.show();
cout<<endl;

cout<<"输入待删除关键字:";
cin>>key;
list.Remove(key); //删除表中一个数据
list.show();
cout<<endl;

slist.Sort(); //按学生平均成绩排序为降序
slist.show();
cout<<endl;
cin>>name; //读入被查找学生姓名
stu.setName(name); //修改对象姓名
k=slist.find(stu); //按姓名
if(k==-1)
{
cout<<"no such student.";
}
slist.show();
cout<<endl;
}

你的main函数有个地方不是很合理,我改过了
就是insert函数,我改成一个参数了,如果不是顺序插入,作为list不太正常,所以不需要参数i。
如果需要随机插入,list的遍历、查询、删除、排序插入就都需要修改得很怪异


c++设计线性表类模板,用以下主函数测试:
include <vector> include <string> include <iostream> using namespace std;class Student { public:Student();void setName(const string& strName);void setId(const string& id);void setmath(int math);void setEng(int eng);void setC(int c);bool operator < (const Student& stu);bo...

抽象数据类型线性表的定义怎么用
可以用C++中的模板类来定义线性表抽象数据类型,就是用来定义线性表的类,但是用的时候可以根据实际设置很多种数据类型

如何实现线性表不同的存储结构?
1、设计四种线性表:顺序存储结构、单链表、循环链表、双向链表的数据存储结构,用户选择某种后就新建一个相应的线性表。2、针对这四种线性表:顺序存储结构、单链表、循环链表、双向链表,每种都分别设计以下五个(或更多的函数):初始化线性表、插入数据、删除数据、查找数据、清空线性表等基本操作。所以...

数据结构笔记(四)——线性表
前面说过,数据结构的类型大方向上来说分为 线性结构 和 非线性结构 ,下面要说的线性表就是线性结构的一种。 (复习一下,前面说过的线性结构有:线性表、栈、队列、字符串、数组和广义表) 上一行是课本上的原话,但是感觉这个在逻辑上有一些不清楚的地方,先忘掉上一行的东西吧,看完下面的...

请问有编译过数据结构模板线性表吗?出现了几个错误.
第一个:int Length();\/\/这里Length首字母大写,区分参数length \/\/返回线性表长度 第二个: int *list=new int[n];\/\/VC++不支持建立动态数组,所以必须NEW \/\/int list[n]; \/\/创建n个数据元素一维数组 第三个:template<class T> T SeqList<T>::Get(int i) {\/\/这里函数的类名必...

数据结构上机实验:C++实现的线性表、栈、队列等数据结构详解
数据结构上机实验指导:C++语言详解 第1章 实验概述 1.1 实验重要性数据结构是程序设计的基础,通过实验,理解并掌握C++语言在实现数据结构中的应用至关重要。1.2 实验步骤1.2.1 需求分析:明确实验目标和预期结果1.2.2 概要设计:规划数据结构和算法实现的总体框架1.2.3 详细设计:细化每个数据结构...

用数组模拟线性表,编写插入函数在线性表中插入1,2,5,8(c++环境下)_百 ...
还有链表实现。想改成模板类,自己改造一下加个template<class T>。。。include<iostream>const int MaxLen=100;typedef struct{int data[MaxLen];int Len;}seqlist;void initial_list(seqlist *L)\/\/初始化;{L->Len=0;} void list_getdata(seqlist *L) \/\/输入线性表 {std::cout<<"输入线...

构造一个线性表到底是用Createlist(Sqlist *L)还是InitList(&L)啊...
函数名字当然是自己随便取呀,这两个函数区别很大 第一个传指针 那么你的链表L不能定义为局部的必须定义为全局的才有用 ,第二个传的是引用(参数类型不要掉了)这是个无副本模式,链表可以不用定义为全局的 而且开销很小效率较高。

线性表顺序存储的12个基本操作,求c语言程序,在c++6.0环境下编译的_百度...
\/\/顺序表的抽象数据类型定义 include <iostream.h> \/\/ 所有bool型函数,返回true表示操作正常完成,否则返回false。template <class T> \/\/ 模板声明, T是类参数(即,可变类型)class sqList { protected:T *elem ; \/\/ elem是指向存放数据元素的数组指针 int Size; \/\/ 顺序表的当前长度(...

求八数码问题算法,并说明下该算法优缺点,要算法,不是源代码(可以没有...
另一方面,不同问题甚至同一问题的不同搜索方法中,需要存储的结点数量相差很大,所以这里采用链式线性表作为存储结构,同时,为适应不同问题,线性表设计成类模板形式。template<class Type> class TList; \/\/线性表前视定义template<class Type> class TNode \/\/线性表结点类模板{ friend class TList<Type>;public: T...

永清县17375444195: c++设计线性表类模板,用以下主函数测试: -
释泥每素: #include using namespace std; class Student { public: Student(); void setName(const string& strName); void setId(const string& id); void setmath(int math); void setEng(int eng); void setC(int c); bool operator < (const Student& stu); bool operator == ...

永清县17375444195: 如何建立一个线性表,用c++的基本语法是什么? -
释泥每素: #include <stdio.h> #include <stdlib.h> #include <iostream.h> #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct //顺序表的定义 { ...

永清县17375444195: 编程序创建一个类模板 用c++ -
释泥每素: // arrayex.h#pragma once#include <iostream> using namespace std; template <class T> class CArrayEx { public: // 构造函数,用固定值初始化 CArrayEx(T Initial,int nSize) { m_nSize=(nSize>1)?nSize:1; m_pArray=new T[m_nSize]; for(int i=0;i<m...

永清县17375444195: 在vc++6.0下使用c语言编写创建线性表函数,错误很多,具体如下. 求高手指导! -
释泥每素: #include // malloc#define Max 100 typedef struct { int data[Max]; int len; }Sqlist; int cSqlist(Sqlist **L,int a[],int n) { int i=0; *L=(Sqlist *)malloc(sizeof(Sqlist)); for(i=0;i { (*L)->data[i]=a[i]; } (*L)->len=n; return 1; } void display(Sqlist L) { int i; for(i=0;L.len>i;...

永清县17375444195: 帮忙设计一个C++程序,关于线性表的 -
释泥每素: #include using namespace std; typedef struct NODE{ int num;//系数int index;//次数 NODE* next; NODE(int n,int i){num=n,index=i,next=NULL;} //构造函数}node,*pnode; class Poly { public: pnode head,tail; Poly(){//构造函数head=tail=new...

永清县17375444195: C++类模板 主函数的问题 -
释泥每素: '\class T> void BLink<T>cin>s-><} }void main() {int a[100];int n;}if(!p||!p->next)throw"the numble of the elment is wrong" }template <next;while(!p){p=p->next;data=a[i];p-data<;p=p->next;BLink(T a[]::BLink(T a[],int n) {first=new ...

永清县17375444195: C++问题21)根据给出的模板函数,编写相应的主函数;(2)主函
释泥每素: 1:你写的那个交换函数名字好像不能用,因为库里面有这个名字的函数,你相当于重载了,不过是不正确的重载,改个函数名:my_swap(); 2:你的交换函数在实际程序...

永清县17375444195: c++中如何使用类模板 -
释泥每素: template<typename T>//方法模板 T add(T const&a,const T&b){//两个const限定等价 return a+b; }//注意,这里没有分号,因为这是方法 template<typename T>//结构体模板 struct S{ T s; };//注意,这里有分号,因为这是结构体 template<...

永清县17375444195: 求一道可在VC++6.0下编译通过的 数据结构 C++版 利用类模板实现线性表的增删拆改等操作 -
释泥每素: #include<iostream.h>#include<stdlib.h>#include<iostream.h> typedef struct seqlist //定义线性表的顺序存储结构 { int *elem; //存储空间分配的首地址 int length ; //线性长度 }seqlist; //此变量可作为线性表数据类型定义线性表 void init(seqlist &l) ...

永清县17375444195: C++中,如果想设计一个函数模板,但是在此函数里又希望对不同的数据类型有不同的处理,请问这个时候应 -
释泥每素: 如果函数的参数的 个数,类型 不同.那就可以用同一个函数名,只是参数不同,写出多个同名函数分别处理不同问题,这就是函数的重载

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网