哪些网站做京东的团购发布外链的步骤
今天,我来讲一下数据结构链表的基本操作,首先我们要知道链表的基本操作有创建,查找,插入,删除。接下来我们逐一实现操作。
结构体定义
typedef struct Node* List;
struct Node{
ElementType Data;
List next;
};
文章目录
- 创建
- 查找
- 插入
- 删除
创建
List creat() {
List L;
L = (List)malloc(sizeof(struct Node));
L->next = NULL;
return L;
}
创建相对比较简单,先申请内存,之后让next为NULL,返回我们创建的头节点就行了。
查找
int Find(List head, int X) {
List L = head;
int i = 0;
while (L->next != NULL&&i<X) {L = L->next;i++;
}
if (i == X) {return i;
}
else {return NULL;
}
}
这里我们有两个参数,一个是指向头节点的指针,一个是我们要插入的位置序号,在这里我们先要让i=0,因为这个链表是有头指针的,第一个不能算进节点中,之后我们进行循环,并且让i++,循环结束的条件要么是找到了,也就是i=x,要么是没有找到,找到了我们就返回i的值,没有找到我们就返回NULL表明我们没有找到。
插入
bool Insert(List head, ElementType X, int p) {
int i = 1;
int k;
List L = head;
k = Find(head, p);
if (k == NULL) {printf("插入的位置有错");return false;
}
else {List tail = (List)malloc(sizeof(struct Node));tail->Data = X;for (; L->next != NULL&&i < p ; i++) {L = L->next;}tail->next = L->next;L->next = tail;return true;
}
}
这里我们输入三个参数,一个是头节点,一个是我们要插入的值,一个是我们要插入的位置。
在这里我们仍然用i来计数,为什么这里我们用i=1而不是i=0呢,因为比如我们要插入到第二个节点,那么我们只需要找到第一个节点的位置,而不需要第二个节点的地址,之后我们检查插入的合法性,如果不合法那么我们直接返回,否则就继续,在这里我们先申请一个节点的空间,之后进入循环,当循环结束的时候,我们肯定找到了要插入位置的前一个位置,这时我们就可以进行节点的插入了,之后返回true。
删除
bool Delete(List head, int p) {
int k,i=1;
List L = head;
List tail;
k = Find(head, p);
if (k == NULL) {printf("删除的位置错误");return false;
}
else {for (; L->next != NULL&&i<p; i++) {L = L->next;}tail = L->next;L->next = L->next->next;free(tail);return true;
}
}
在这里我们输入两个参数,一个是头节点,一个是要删除的位置。
在这里我们依然让i=1,原因是链表是单向的,我们只需要找到要删除位置的前一个位置就行了,还是先检查删除的合法性,如果不合法那么我们就直接返回,如果合法那么我们就进行下一步操作,当循环终止的时候说明我们找到了删除位置的前一个位置,这时我们就可以进行删除操作了,
至此,讲解完毕。
(新人写作,难免有错误或不够精简的地方,请谅解,也请各位指点)