[干货]超详细数据结构链接列表的详细说明

电脑杂谈  发布时间:2020-04-20 04:14:25  来源:网络整理

链表结构 java代码_结构链表_结构链表

链表是一种常见的基本数据结构,在这里充分利用了结构指针.

链表可以动态存储和分配. 也就是说,链表是一个非常强大的数组. 它可以在节点中定义多种数据类型,还可以随意添加,删除和插入节点.

链表中有一个头指针,通常由头表示,并存储一个地址.

链表中的节点分为两类,头节点和常规节点. 头节点没有数据字段.

链表中的每个节点都分为两个部分,一个数据字段和一个指针字段.

说到这一点结构链表,朋友们应该明白,链表就像一个汽车链,头指向第一个元素:

链表结构 java代码_结构链表_结构链表

第一个元素再次指向第二个元素,直到最后一个元素.

此元素不再指向其他元素,被称为“表尾”,其地址部分放置“ NULL”(表示“空地址”),链接列表在此处结束.

作为具有强大功能的链表,当然可以进行许多操作.

例如: 创建,修改,删除,插入,输出,排序,倒序,清空链表元素,查找链表的长度等.

初学者链表,通常以单向链表开始-→NULL头

这是一个空的链表.

结构链表_结构链表_链表结构 java代码

 ---->[p1]---->[p2]...---->[pn]---->[NULL]
head   p1->next  p2->next   pn->next

n个节点的链接列表.

创建链接列表

typedef struct student{
int score;
struct student *next;
} LinkList;

通常,我们使用typedef结构来创建链接列表,因为以这种方式定义结构变量时,我们可以直接使用LinkList * a;. 定义结构类型变量.

初始化一个链表,n是链表节点的数量.

链表结构 java代码_结构链表_结构链表

LinkList creat(int n){
LinkList head, node, end;//定义头节点,普通节点,尾部节点;
head = malloc(sizeof(LinkList));//分配地址
end = head; //若是空链表则头尾节点一样
for (int i = 0; i < n; i++) {
node = malloc(sizeof(LinkList));
scanf(“%d”, &node->score);
end->next = node;
end = node;
}
end->next = NULL;//结束创建
return head;
}

修改链表节点值

很容易修改链接列表节点的值. 以下是传递链表和要修改的节点以修改值的函数.

void change(LinkList list,int n) {//n为第n个节点
 LinkList t = list;
 int i = 0;
 while (i < n && t != NULL) {
   t = t->next;
   i++;
  }
  if (t != NULL) {
   puts(“输入要修改的值”);
   scanf(“%d”, &t->score);
  }
  else {
   puts(“节点不存在”);
  }
 }

删除链接列表节点

删除链接列表的元素意味着前一个节点的指针字段与要删除的节点交叉并指向下一个节点.

链表结构 java代码_结构链表_结构链表

即: p-> next = q-> next;然后释放q节点的空间,即释放(q);

  void delet(LinkList list, int n) {
  LinkList t = list, *in;
  int i = 0;
  while (i < n && t != NULL) {
   in = t;
   t = t->next;
   i++;
  }
  if (t != NULL) {
   in->next = t->next;
   free(t);
  }
  else {
   puts(“节点不存在”);
  }
  }
 }

我们可以看到,在插入节点之前,先插入节点的指针字段以链接插入节点的数据字段结构链表,然后再将插入节点的指针字段链接到插入节点的数据字段.

根据该图,插入节点为: head-> next = e-> next; head-> next = e;

使用两个结构指针和一个int数据来添加链接列表节点.

void insert(LinkList *list, int n) {
LinkList *t = list, *in;
int i = 0;
while (i < n && t != NULL) {
    t = t->next;
    i++;
}
if (t != NULL) {
    in = malloc(sizeof(LinkList));
    puts("输入要插入的值");
    scanf("%d", &in->score);
    in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
    t->next = in;//填充t节点的指针域,把t的指针域重新指向in
}
else {
    puts("节点不存在");
}
}

输出链接列表

输出链接列表非常简单,仅在遍历时输出.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-181966-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...