第二次作业(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),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。












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

相关文章推荐

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

实验题目:栈的应用-算术表达式求值                                          实验目的 : 1 .掌握栈的定义及实现; 2 .掌握利用栈求解算术表达式的方法。 ...

数据结构第二次作业

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

(hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数<=3,输出剩下的人 )

题目:士兵队列训练问题Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub...

数据结构上机作业3:栈——八皇后

问题描述: 用栈来求解N皇后问题 作者:何知令 完成时间:2017年5月21日 代码: /* 问题描述: 用栈来求解N皇后问题 作者:何知令 完成时间:2017年5月21日 */ #incl...

数据结构作业保存3-5返回指定区间内的最大值

我第一次写时,不知道有RMQ这个神奇又好用的算法。自己敲了一个,交上去。。。超内存不过,而且因为思路原因要重敲。 这时候请教同学才知道RMQ!我真是太朴实了。...

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

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

系统结构第二次作业

  • 2014年06月30日 22:57
  • 272KB
  • 下载

华南理工数据结构大作业第一题单链表 删除创建等各种简易操作

#include #include #include /* (1) 初始化单链表h; (2) 依次插入5个元素:{“张三” , 85}, {“李四” , 95}, ...
  • hhooong
  • hhooong
  • 2014年12月10日 11:51
  • 1308

数据结构作业4

  • 2017年11月14日 14:09
  • 19KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第二次作业(3.数据结构)
举报原因:
原因补充:

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