第一次作业(数据结构)

线性表:是N个相同数据元素的有序系列。
链表是线性表的链接存储结构
附件:程序源代码

template
struct Node
{
T data;
Node*next;
};

template
class LinkList
{
public:
LinkList();
LinkList(T a[], int n);
~LinkList();
int Length();
T Get(int i);
int Locate(T x);
void Update(int i,T x);
void Insert(int i, T x);
T Delete(int i);
void PrinList();
private:
Node*first;
};

endif

include “LinkList.h”

template
LinkList::LinkList()
{
first = new Node; first->next = NULL;
}

template
LinkList::LinkList(T a[], int n)
{
first = new Node;
Node *r, *s;
r = first;
for (int i = 0; i

include

using namespace std;

class Student
{
public:
Student(){} //构造函数
Student(string sname, int iage){ name = sname; age = iage; }
~Student(){} //析构函数
friend ostream& operator << (ostream &oo, const Student &stu);
friend bool operator != (const Student &stu1, const Student &stu2);
private:
string name;
int age;
};

ostream& operator << (ostream &oo, const Student &stu);
bool operator != (const Student &stu1, const Student &stu2);

endif

include “student.h”

ostream& operator << (ostream &oo, const Student &stu)
{
oo << “姓名: ” << stu.name << “, ” << “年龄: ” << stu.age;
return oo;
}

bool operator != (const Student &stu1, const Student &stu2)
{
return ((stu1.name != stu2.name) || (stu1.age != stu2.age));
}

include

include

using namespace std;

include “linklis.h”

include “studentcpp.h”

int main()
{
Student studengArray[] = { Student(“陈折江”, 19), Student(“程淼”, 20), Student(“陈曾汉”, 21), Student(“戴鑫”, 22), Student(“陈鹏”, 23)};
LinkListb(studengArray, 5);

cout << "执行插入前单链表b为:" << endl;
b.PrinList();
cout << "插入前单链表b的长度为:" << b.Length() << endl;
cout << endl;

Student mochou = Student("几斤",22);
try
{
    b.Insert(3, mochou);
}
catch (char*wrong)
{
    cout << wrong;
}
cout << "执行插入后单链表b为:" << endl;
b.PrinList();
cout << "执行插入后单链表b的长度为:" << b.Length()<< endl;
cout << endl;

cout << "按位置查找第二个元素,该元素信息为:" << b.Get(2) << endl;
cout << endl;

cout << "按值\"几斤\"查找,\"几斤\"在单链表的位置为:" << b.Locate(mochou) << endl;
cout << endl;

try
{
    if (b.Length()){
        cout << "执行删除第一个元素的操作" << endl;
        b.Delete(1);
        cout << "删除第一个元素后单链表的长度为:" << b.Length() << endl;
    }
    else{
        cout << "顺序表b长度为0" << endl;
    }
}
catch (char*wrong)
{
    cout << wrong;
}

cout << "执行删除操作后单链表b为:" << endl;
b.PrinList();
cout << endl;

cout << "执行修改操作" << endl;
cout << "修改前单链表b第三个元素是:" <<b.Get(3)<< endl;
cout << endl;

try
{
    b.Update(3,Student("Jack",25));
}
catch (char*wrong)
{
    cout << wrong;
}
cout << "执行修改后单链表b为:" << endl;
b.PrinList();
cin.get();
return 0;

}

树是n个点的有限集合。
二叉树:是n个结点的有限集合,该集合(空集)称为空二叉树,或者由一个根节点和两块互不相交、分别称为根节点的左子树和右子树的二叉树组成。
满二叉树,完全二叉树,二叉排序树,平衡二叉树。
应用有哈夫曼树,

双向列表的增删改查
双向列表的模板
templat
struct Dulnode
{
DataType data;
DulNode*prior,*next;
};
template
class sLinkList
{
public:
LinkList();
LinkList(T a[], int n);
~LinkList();
int Length();
T Get(int i);
int Locate(T x);
void Update(int i,T x);
void Insert(int i, T x);
T Delete(int i);
void PrinList();
private:
Node*first;
};
双向链表插入
template
void Link:: Insert(int i; T x)
{
Node *p; int j;
p = first; j = 0;
while(p!=Null && j

第一章 绪论作业答案(共50分) 一、分析如下程序中 (1)~ (10)各语句的频度。(每个1分,共10分) Ex( ) { int i , j , t ; (1) for( i=1 ; i<10 ; i++) //n = (2) printf(“\n %d” , i ); //n = (3) for(i=1; i<=2; i++) //n = (4) printf(“\n”); //n = (5) for(i=1; i<=9; i++) //n = { (6) for(j=1; j <= i ; j++) //n = { (7) t = i * j ; //n = (8) printf(“]”,t); //n = } (9) for(j=1; j 0) { if(x > 100) {x -= 10 ; y -- ;} else x ++ ; } 问if 语句执行了多少次?(2分) y--执行了多少次?(2分) x ++执行了多少次?(2分) 三、回答问题(共25分) 书中16页的起泡排序如下: void bubble_sort(int a[],int n){ //将a中整数序列重新排列成自小至大有序的整数序列。 for(i=n-1,change=TRUE;i>=1&&change;--i){ change=FALSE; for(j=0;ja[j+1]{a[j]<-->a[j+1];change=TRUE; } } }//bubble_sort 1.(共15分)分析该算法的最佳情况 ,最坏情况和平均情况下各自的时间复杂度(给出分析思路与过程)。 (1) 最佳情况的时间复杂度分析(5分): (2) 最坏情况的时间复杂度分析(5分): (3) 平均情况的时间复杂度分析(5分): 2.(共10分)比较与C语言书中的起泡排序异同,并从时空效率角度说明谁更优。 四、完成如下选择题(每3分,共9分)。 1. 设f为原操作,则如下算法的时间复杂度是( )。 for (i = 1; i*i=1;i--) for(j=1;jA[j+1]) A[j]与A[j+1]对换; 其中n为正整数,则算法在最坏情况下的时间复杂度为( )。 A.O(n) B.O(nlog2n) C. O(n3) D. O(n2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值