钓罢归来不系船|

MiYol

园龄:2年5个月粉丝:0关注:3

链式存储结构

链表的插入,删除比较方便,在给定前驱节点的时候,时间复杂度为O(1)
查找比较麻烦,要根据头指针一个一个往下找,时间复杂度为O(n)

单链表

头插法

使用头插法,读入数据的顺序与生成链表的元素顺序是相反的

#include "iostream"
typedef struct LinkNode{
LinkNode *next;
int data;
} ;
LinkNode *linkNodeInsert(){
LinkNode *head = (LinkNode *) malloc(sizeof (LinkNode));
LinkNode *s;
head -> next = NULL;
for (int i = 1; i <= 5; i++){
s = (LinkNode *) malloc(sizeof (LinkNode)); //结构体指针分配内存空间
s -> data = i;
s -> next = head -> next;
head -> next = s;
}
return head;
}
void display(LinkNode *head){
while (head -> next){
head = head -> next; //指针往后移一位数,指向下一个节点
printf("%d\n", head -> data);
}
}
int main(){
LinkNode *head;
head = linkNodeInsert();
display(head);
}

尾插法

定义一个尾指针rear使之指向链表尾节点,不让每一次插入都要从头节点一直查找到尾节点


#include "iostream"
typedef struct LinkNode{
LinkNode *next;
int data;
} ;
LinkNode *linkNodeInsert(){
LinkNode *head = (LinkNode *) malloc(sizeof (LinkNode));
LinkNode *rear = head; //添加尾指针,使之指向链表的尾节点
for (int i = 1; i <= 5; i++){
LinkNode *s = (LinkNode *) malloc(sizeof (LinkNode));
s -> data = i;
rear -> next = s;
rear = s;
}
rear -> next = NULL; //使尾指针指向Null
return head;
}
void display(LinkNode *head){
while (head){
head = head -> next;
printf("%d\n", head -> data);
}
}
int main(){
LinkNode *head;
head = linkNodeInsert();
display(head);
}

双链表

头插法

其实更单链表的创建差不多,只是该节点的指针可以指向改节点的前一个节点的地址

#include "iostream"
typedef struct LinkNode{
int data;
LinkNode *prior, *next;
};
LinkNode *linkNode(){
LinkNode *head = (LinkNode *) malloc(sizeof (LinkNode));
head -> next = NULL;
LinkNode *s;
for (int i = 1; i <=5; i++){
s = (LinkNode *) malloc(sizeof (LinkNode));
s -> data = i;
s -> next = head -> next;
head -> next = s;
s -> prior = s; //s节点向后移
}
return head;
}
void display(LinkNode *head){
while (head -> next){
head = head -> next;
printf("%d\n", head -> data);
}
}
int main(){
LinkNode *head = linkNode();
display(head);
}

尾插法

#include "iostream"
typedef struct LinkNode{
int data;
LinkNode *prior, *next;
};
LinkNode *linkNode(){
LinkNode *head = (LinkNode *) malloc(sizeof (LinkNode));
LinkNode *rear = head;
for (int i = 1; i <= 5; i++){
LinkNode *s = (LinkNode *) malloc(sizeof (LinkNode));
s -> data = i;
rear -> next = s;
s -> prior = rear; //指向前一个节点
rear = s;
}
rear -> next = NULL;
return head;
}
void display(LinkNode *head){
while (head -> next){
head = head -> next;
printf("%d\n", head -> data);
}
}
int main(){
LinkNode *head = linkNode();
display(head);
}

本文作者:MiYol

本文链接:https://www.cnblogs.com/miyol/p/16724852.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   MiYol  阅读(31)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 红昭愿 音阙诗听
  2. 2 恋人心 兰音-Reine
  3. 3 Spica HUMMING LIFE
红昭愿 - 音阙诗听
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.