- 单向链表类C描述
typedef struct node{
datatype data;//数值域
struct node *next;//指针域
}node,*linklist;//节点类型,指针类型
- 链表基本算法
1.单向链表定位
node *locate(node *head,int i)//head是带头结点的单向链表的头指针,该算法定位于链表中的第i个结点
{
node *p=head;//指针初始化,p指向头结点
int j=0;//j为计数器,初值为零
while((p!=NULL)&&(j<i))
{
p=p->next;//p后移,p移至第i个结点为止
j++;//j计数
}
return(p);//p指向第i个结点(返回第i个结点的地址)
}
2.单向链表插入
void insert(linklist head,int i,datatype x)
{//head是带头结点的单链表的头指针
//该算法在第i个结点后面插入其数值为x的新结点
node *p=locate(head,i-1);//令p指向第i-1个结点
if(p!=NULL)
{
node *q=(linklist)malloc(sizeof(node));
q->data=x;//生成新结点,其数值为x
q->next=p->data;
p->next=q;//完成插入
}
}
3.单向链表删除
void delete(node* head,int i,datatype e)
{//head是带头结点的单链表的头指针
node *p=head;//初始化指针
int j=0;//j为计数器
while(p->next!=NULL&&j<i-1)
{
p=p->next;j++;//寻找第i-1个结点
}
if(p->next!=NULL&&j==i-1)
{
node *q=p->next;//q指向p的下一个结点(即第i个结点)
p->next=q->next;//删除第i个结点
e=q->data;//保留第i个结点的值
free(q);//释放q
}
}