链表的定义
链表由若干个结点组成(每个节点代表一个元素),且结点在内存中的存储位置通常是不连续的
结点一般由指针域和数据域组成
struct node
{
typename data;
node* next;
};
头结点的定义:链表分为有头结点的和没有头结点的,头结点一般称为head,其数据域不存放任何内容,指针域指向第一个数据域有内容的结点(算法笔记中默认为有头结点),最后一个结点的指针域指向NULL,表示一条链表的结尾
new
new为c++用来申请动态空间的运算符,返回类型为申请的变量同类型指针
typename *p=new typename;
注意加delete
delete(p);
创建链表
node* create()
{
node *p,*pre,*head;
head=new node;
head->next=NULL;
pre=head;
for(int i=0;i<n;i++)
{
p=new node;
p->data=a[i];
p->next=NULL;
pre->next=p;
pre=p;
}
delete(p);
delete(pre);
return head;
}
查找元素
int calculate(node* head,int x)//计算元素x在以head为头结点的链表中有多少个
{
int count=0;
node* p=new node;
p=head->next;
while(p!=NULL)
{
if(p->data==x) count++;
p=p->next;
}
delete(p);
return count;
}
插入元素
void insert(node* head,int pos,int x)
{
node* p=new node;
p=head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
/*注意!循环结束后的p为待插入结点位置的前一个结点*/
node* q=new node;
q->data=x;
q->next=p->next;
p->next=q;
/*如插入的位置是第一个位置,那么循环不会执行,p此时就是头结点,p->next就是原本第一个结点*/
}
删除元素
void linklist_delete(node* head,int pos)
{
node *p=new node;
p=head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
p->next=p->next->next;
}
静态链表
静态链表实现原理是hash,不需要头结点
struct node
{
typename data;
int next;
}linklist[size];
我没太搞明白这有啥用,似乎是在地址有限得时候,以地址作为数组下标,方便阅读