/*线性表的顺序存储与链接存储的区别:
1.在顺序存储中,每个存储结点只含有所存元素本身的信息,元素之间的逻辑关系是通过数组下标位置简单计算出来的。在链接存储中,每个存
储结点不仅含有所存元素本身的信息,而且含有元素之间逻辑关系的信息。
2.在数据的顺序存储中,由于每个元素的存储位置都可以通过简单计算得到,所以可以随机地存取数据中的任一元素,对任一元素的存取时间都
相同,这是一种随机存储机制。
而在数据的链接存储中,由于每个元素的存储位置是保存在它的前驱结点或后继结点中的,所以只有当访问到其前驱结点或后继结点后才能够按
指针访问该结点,这是一种顺序存储机制。这样的链接存储表示被称为链接表。
3.在线性表的顺序存储中,逻辑上相邻的元素,其对应的存储位置也相邻,所以当进行插入或删除运算时,通过需要平均移动半个表的元素,这
是相当费时的操作。
在线性表的链接存储中,逻辑上相邻的元素,其对应的存储位置是通过指针来链接的,因而每个结点的存储位置可以任意安排,不必要求相邻,
所以当进行插入或删除运算,只需修改相关的结点的指针域即可,灵活性较强。由于链接表的每个结点带有指针域,因而在存储空间上比顺序
存储要付出较大的代价。
*/
#include"iostream"
using namespace std;
struct Lnode{
int data;
Lnode *next;
};
void main()
{
Lnode *p,*q,*p1;
p1=p=new Lnode; //动态产生结点并将其地址赋给P和p1指针
//p1=new Lnode;
//p=p1;
cout<<"请输入三个正整数:";
for(int i=0;i<3;i++)
{
q=new Lnode(); //q指向一个动态产生的地址
cin>>q->data;
p->next=q; //将q结点链接到p结点之后
p=q; //将p结点后移,指向后继结点q
}
p->next=NULL; //将链表的最后一个指针域设置为空
p=p1->next; //将链表的表头指针p1结点的指针域指向p结点
cout<<"对输入的三个正整数给予输出:";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
/*
若单链表中的接点来自数组中的结点,则next域指向的的后继结点所在的下标,所心它应被定义为整数类型.如:
struct Lnode{
int data;
int next;
};
通常下标为0的元素不作为单链表中的结点使用,而是用它的指针域保存表头指针,这样,数组最多能够提供maxsize-1个结点。另外,当一个结点
去留后继结点时,其指针域应被赋予数值0,表示空指针。
*/
单链表
最新推荐文章于 2021-04-30 00:32:23 发布