链表
链表相似于数组的部分功能也不同于数组,在插入元素,删除元素方面强于数组.链表删除,插入更加的容易.
链表由一系列不必在内存中相连的结构组成.每一个结构均含有表元素和指向包含该元素后继元的结构指针.
这是链表的创建,先定义结构体
//定义结构体
struct Node;
typedef struct Node *Position;
struct Node
{
int num;
Position next;
};
//构建空的结构体
void Creat(Position &node)
{
node = (Position)malloc(sizeof(struct Node));
if (node == NULL)
exit(0);
node->next = NULL;
}
插入一个新的结构体,并与原来的结构体合成一条”链”;将新的链表插入到原链表的第一个元素前面,再将表头修改
//插入新的数
void Inset(Position &node, int inset)
{
if (node == NULL)
Creat(node);
//创建一个新的链
Position P;
P = (Position)malloc(sizeof(struct Node));
if (P == NULL)
exit(0);
//将链合成一起
P->num = inset;
P->next = node->next;
node->next = P;
}
以及链表中元素的删除:
将要删除数的前一个的指针位置(P)找到,再用另一个指针(L)指向找到的链表位置.P->next = L->next;
//元素的删除
T Dele(T node, int dele)
{
if (node == NULL)
return 0;
T cpynode = node;
if (cpynode->num == dele)
cpynode = cpynode->next;
while (cpynode->next != NULL && cpynode->next->num != dele)
cpynode = cpynode->next;
if (cpynode != NULL)
{
T temp = cpynode->next;
cpynode->next = temp->next;
free(temp);
}
return node;
}
元素的查找
T Find(T node, int find)
{
if (node == NULL)
return 0;
//查找元素所在链表的位置指针
T cpynode;
cpynode = node;
while (cpynode != NULL && cpynode->num != find)
cpynode = cpynode->next;
//返回其指针
return cpynode;
}
链表的源代码
#include <stdio.h>
#include <stdlib.h>
//定义结构体
struct Node;
typedef Node *T;
struct Node
{
int num;
T next;
};
//构建空的结构体
void Create(Position &node)
{
node = (Position)malloc(sizeof(struct Node));
if (node == NULL)
exit(0);
node->next = NULL;
}
T Inset(int m, T node)
{
T node_temp;
if(node == NULL)
node =Create(node);
T cpynode = node;
node_temp = (T)malloc(sizeof(struct Node));
if (node_temp == NULL)
return 0;
node_temp->num = m;
node_temp->next = cpynode->next;
cpynode->next = node_temp;
return node;
}
//元素查找
T Find(T node, int find)
{
if (node == NULL)
return 0;
T cpynode;
cpynode = node;
while (cpynode != NULL && cpynode->num != find)
cpynode = cpynode->next;
return cpynode;
}
//元素的删除
T Dele(T node, int dele)
{
if (node == NULL)
return 0;
T cpynode = node;
if (cpynode->num == dele)
cpynode = cpynode->next;
while (cpynode->next != NULL && cpynode->next->num != dele)
cpynode = cpynode->next;
if (cpynode != NULL)
{
T temp = cpynode->next;
cpynode->next = temp->next;
free(temp);
}
return node;
}
int main()
{
T node = NULL;
int i; i = 0;
while (i < 5)
{
int num;
scanf("%d", &num);
node = Inset(num, node);
i++;
}
int find;
scanf("%d", &find);
Find(node, find);
int dele;
scanf("%d", &dele);
node = Dele(node, dele);
system("pause");
return 0;
}