赞
踩
众所周知,链表是数据结构的重中之重,但有许多朋友对此并不感冒,甚至想骂#¥……#……#。本文主要介绍小编对于链表的喜与悲,乐于忧。
- typedef int ElemType;//假设ElemType为自定义int型
- //单链表存储结构
- typedef struct LinkNode
- {
- ElemType data;//存储数据元素的数据域
-
- struct LinkNode* next;//指向后继结点的指针域
-
- }LinkNode;//SingleLink 的类型
-
- //创建头结点并置空
- void InitList(LinkNode *(&L))
- {
- L = (LinkNode*)malloc(sizeof(LinkNode));//创建头结点L
- L->next = NULL;//将其next域置空,初始化链表
- }
- //头插法
- void ListInsertF(LinkNode* (&L), int n, ElemType a[])
-
- {
- LinkNode* s;
- L = (LinkNode*)malloc(sizeof(LinkNode));//创建头结点;
- L->next = NULL;//头结点置空
- for (int i = 0; i < n; i++)//循换建立数据结点
- {
- s = (LinkNode*)malloc(sizeof(LinkNode));//循环创建新的结点s
-
- s->data=a[i];//创建数据结点s
-
- s->next = L->next;//将L的后继结点赋值给s的后继结点
-
- L->next = s;//将结点s赋值给L的后继结点
- }
- }
- //尾插法
- void ListNodeR(LinkNode* (&L), ElemType a[], int n)
- {
- LinkNode* s;
- LinkNode* r;
- L = (LinkNode*)malloc(sizeof(LinkNode));
- r = L;//将L赋值给r;()
- for (int i = 0; i < n; i++)
- {
- s = (LinkNode*)malloc(sizeof(LinkNode));
-
- s->data=a[i];//创建数据结点s
-
- r->next = s;//将s赋值给r的后继指针
-
- r = s;//将结点s赋值给r
- }
- }
- bool ListInsert(LinkNode* (&L), int i, ElemType e)
- {
- int j = 0;
-
- LinkNode* p = L;//p指向头结点
- LinkNode* s;//定义结点
- if (i <= 0)
- return false;
-
- while (j < i - 1 && p != NULL)//寻找第i-1个结点p
- {
- j++;
- p = p->next;
- }
-
- if (p == NULL)// 未找到第i-1个位置
- return false;
- else
- {
- s = (LinkNode* )malloc(sizeof(LinkNode));//动态申请一个新的内存空间给新结点s
- s->data = e;//将e赋值给data域
-
- s->next = p->next;//将p的后继结点赋值给s的后继结点
-
- p->next = s;//将结点s赋值给p的后继结点
-
- return true;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。