第二次作业(3.数据结构)

原创 2016年05月01日 11:32:09

这个作业是对上一次作业3的一个补充。单链表的实现在上一个作业3已经给出。


1.循环单链表

循环单链表和单链表差不多,只是将终端结点的指针域由空指针变为指向头结点,而且为了查找开始结点和尾结点的时间复杂度都为O(1),所有在循环列表中一般都由指向终端结点的尾指针来标识循环列表。

増删改查的实现和单链表一样。

2.双向链表

双向链表的结点在单链表的基础上增加了一个指向上一个结点的指针域。

template <class T>

struct DulNode

{

     T data;

     DulNode <T> *prior,* next;

}

双向链表和单链表在求表长,按位置查找,按值查找遍历等操作上的实现都差不多,不同的只是插入和删除操作。

template <class A>

void ListList< A> ::Insert(int i ,A x)

{

    p=first;

    count =0;

    while (p!=NULL&&count<i-1)

    {

        p=p->next;

        count++;

    }

    if(p==NULL)

        throw "位置";

    else

    {

        s=new Node;

        s->prior=p;

        s->next=p->next;

        p->next->prior=s;

        p->next=s;

    }

}


template<class A>

A LinkList<A>::Delete(int i)

{

    p=first;

    count=0;

    while (p!=NULL&&count<i-1)

    {

        p=p->next;

        count++;

    }

    if(p==NULL||p->next==NULL)

        throw"位置";

    else

    {

        (p->prior)->next=p->next;

       (p->next)->prior=p->prior;

       delete q;

       return  x;

    }

}

3.双向循环链表

双向循环链表和双向链表差不多,就是将头指针的prior指针域指向终端结点,将终端结点的next指针域指向头结点。


4.内存对齐

内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。

每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

5.hash散列

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。












版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构第二次作业 二分

首先是我自己的想法,
  • London_lj
  • London_lj
  • 2014年11月05日 00:05
  • 680

数据结构第二次作业

数据结构第二次作业p143/27//反转链表的操作 (a)template void chain::reverse() { if (!head) return; c...
  • yhralxq
  • yhralxq
  • 2016年09月16日 21:41
  • 109

第二次数据结构作业

       上次作业有几处错误  这是第二次作业~使用stack 和queue         以后就都写成类了 分.h 和.cpp这样规范些. 请高手指教 停车场管理。设停车场内只有一个可停放几辆...
  • jiajie999
  • jiajie999
  • 2007年04月03日 00:33
  • 529

第一次作业(3.数据结构)

1.链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括...
  • heizi93
  • heizi93
  • 2016年04月21日 00:00
  • 381

机器学习技法第二次作业

趁着deadline的前一天把作业做完了,主要是后面两个编程的题目比较花时间。下面直接进入主题吧。 Question 1 这题直接求导就好了 Question 2 黑塞矩阵...
  • qian1122221
  • qian1122221
  • 2015年12月17日 20:11
  • 1633

Coursra-MachineLearning 第二次作业总结

Logistic Regression1.1 Visualizing the data我们的目标是根据ex2data1里面的数据,把被接受入学的数据和被拒绝入学的数据都标注在一张坐标图上。 为了表示...
  • dawningblue
  • dawningblue
  • 2017年09月30日 16:27
  • 132

计算机网络第二次作业

显示网卡基本信息小程序制作 一、运行界面 运行界面采用Java中的WindowBuilder设计的,界面如下图所示 其中在网卡基本信息一栏,网卡类型后面采用下拉框显示本机网卡设备,在IP...
  • ABnanna
  • ABnanna
  • 2017年09月30日 15:54
  • 146

数据结构第二次作业(表达式求值【栈模拟】)

实验题目:栈的应用-算术表达式求值                                          实验目的 : 1 .掌握栈的定义及实现; 2 .掌握利用栈求解算术表达式的方法。 ...
  • wang907553141
  • wang907553141
  • 2016年10月06日 17:30
  • 2091

数据结构大作业

数据结构大作业 一、大作业的性质和目的 数据结构大作业是对软件设计的综合训练,包括问题分析、总体设计、用户界面设计、程序设计基本技能和技巧,以至一套软件工作规范的训练和科学作风的培养。在数据结构实...
  • JiangGuanchu
  • JiangGuanchu
  • 2013年02月16日 19:39
  • 5081

第二次作业

什么是统一过程?统一过程的4个阶段是什么? 答:“统一过程”是一种统一的方法学,是把Booch方法、Jacobson方法、Rumbaugh方法中最优秀的特色组合在一起。 四个阶段为:      ...
  • leiying12qi
  • leiying12qi
  • 2013年10月15日 22:50
  • 303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第二次作业(3.数据结构)
举报原因:
原因补充:

(最多只允许输入30个字)