一、创建链表
首先定义一个node型的结构体
struct node{
typename data; //数据域
node *next; //指针域
};
创建
node * create(int array[n])
{
node *p,*head,*pre; //pre保存当前节点的前驱节点,head为头结点
head = new node; //创建头结点
head->next = NULL; //头结点不需要数据域,指针域为空
pre = head; //记录pre为head
for(int i = 0;i < n+1 ;i++)
{
p = new node; //新建节点
p->data = arry[i]; //将array[i]赋给新建的结点作为数据域
p->next = NULL; //新结点的指针域设为NULL
pre->next = p; //前驱结点的指针域设为当前新建的结点的地址
pre = p; //把pre设为p,作为下个结点的前驱结点
}
return head; //返回头结点指针
}
二、查找元素
查找x在链表中出现的次数count
int search(node *head,int x)
{
int count = 0; //计数器
node * p = head->next; //从第一个结点开始
while(p != NULL) //只要不到链表尾
{
if(p->data == x)
{
count++;
}
p = p->next; //指针移动到下一个结点
}
return count; //返回计数
}
三、插入元素
在第pos位插入元素i
void insert(node *head,int pos,int i)
{
node *p = head;
for(int i = 0;i < pos-1;i++)
{
p = p->next; //pos-1是为了到插入的前一个结点
}
node *q = new node; //新建结点
q->data = i; //新建结点的数据域为x
q->next = p->next; //新结点的下一个结点指向原先插入位置的结点
p->next = q; //前一个位置的结点指向新结点
}
四、删除结点
删除数据域为x的结点
void del(node *head,int x)
{
node *p = head->next; //p从第一个结点开始枚举
node *pre = head; //pre始终保存p的前驱结点的指针
while(p != NULL)
{
if(p->data == x) //数据域为x,删除该结点
{
pre->next = p->next;
delete(p);
p = pre->next;
}
else 数据域不为x,pre和p都后移一位
{
pre = p;
p = p->next;
}
}
}
五、打印数据
void print(node *head)
{
node *L = head; //新建链表,返回的头指针head赋给L
L = L->next; //从第一个结点开始有数据
while(L != NULL)
{
printf("%d ",L->data); // 输出每个结点的数据域
L = L->next;
}
}