1, 以前在顺序结构中,每个数据元素只需存数据元素就可以。现在链式存储结构中,除了要存取数据元素信息外,还要存储它的后继元素的存储地址。
因此,为了每个数据元素a与其直接后继数据元素b之间的逻辑关系,对数据元素a来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称作指针或链。这两部分信息组成数据元素的存储映像,称为结点(Node)。
n个节点(元素的存储映像)链接成一个链表,即为线性表(a1,2a3,a4,a5,...,an)的链式存储结构,因为此链表的每个结点中只包含一个指针域,所以叫单链表。单链表正是通过每个结点的指针域将线性表的数据元素按其逻辑次序链接在一起。
建成链式存储线性表单元结构:
typedef struct Node
{
int date;
struct Node *next;
}Node;
建成链式存储线性表
void chuangjian(Linklist *L,int n)
{
Linklist p,t;//声明结点
*L=(Linklist)malloc(sizeof(Node));//生成新结点
(*L)->next=NULL;//新结点指向空结点
t=(*L);//中间值
for(int i=0;i<n;i++)
{
//尾插法
p=(Linklist)malloc(sizeof(Node));//生成新结点p
p->next=NULL;//p结点的后继为空
scanf("%d",&(p->date));//赋值操作
t->next = p;//将表尾终端结点的指针指向新结点
t = p;//将当前结点定义为表尾终端节点
}
}
void chuangjian(Linklist *L,int n)
{
Linklist p;//声明结点
*L=(Linklist)malloc(sizeof(Node));//生成新结点
(*L)->next=NULL;//新结点指向空结点
for(int i=0;i<n;i++)
{
/*//头插法
p=(Linklist)malloc(sizeof(Linklist));//生成新结点p
scanf("%d",&(p->date));//为新结点的date域赋值
p->next=(*L)->next;//p的后继指向(*L)的后继
(*L)->next=p;*///插入到表头
}
}
打印操作:
int main(int argc, const char * argv[]) {
Linklist l;
int i;
scanf("%d",&i);
chuangjian(&l, i);
while (l->next!=NULL)
{
l=l->next;
printf("%d\n",l->date);
}
return 0;
}