头结点单链表的创建框架(头插法):
#include <stdio.h>
#include <stdlib.h>
struct hnode
{
int num;
struct hnode * next;
};
typedef struct hnode Hnode;
typedef Hnode * Hlink;
void create_new_node(Hlink *new_node)
{
*new_node=(Hlink)malloc(sizeof(Hnode));
}
void create_hlink(Hlink * head)
{
create_new_node(head);
(*head)->next=NULL;
}
void insert_node_head(Hlink head,Hlink new_node)
{
new_node->next=head->next;
head->next=new_node;
}
void display_link(Hlink head)
{
Hlink p=NULL;
if(NULL==head)
{
printf("no such link!\n");
}
else if(NULL==head->next)
{
printf("link is empty!\n");
}
else
{
p=head->next;
while(p!=NULL)
{
printf("%d\n",p->num);
p=p->next;
}
}
}
int main()
{
Hlink head = NULL;
Hlink new_node=NULL;
int i;
int loc;
int num;
create_hlink(&head);
for(i=0;i<10;i++)
{
create_new_node(&new_node);
new_node->num=i+1;
insert_node_head(head,new_node);
}
display_link(head);
return 0;
}
尾插法
函数定义
void insert_node_tail(Hlink head,Hlink new_node)
{
Hlink p=NULL;
p=head;
while(p->next!=NULL)
{
p=p->next;
}
p->next=new_node;
new_node->next=NULL;
}
主函数的调用
insert_node_tail(head,new_node);
中间插入法
函数定义
void insert_node_mid(Hlink head,Hlink new_node,int loc)
{
Hlink p=NULL;
Hlink q=NULL;
q=head;
p=head->next;
while(p!=NULL&&p->num!=loc)
{
q=p;
p=p->next;
}
q->next=new_node;
new_node->next=p;
}
主函数部分的编写及调用
printf("please input location:\n");
scanf("%d",&loc);
create_new_node(&new_node);
printf("please input num:\n");
scanf("%d",&new_node->num);
insert_node_mid(head,new_node,loc);
删除操作
函数定义
void delete_node(Hlink head,int num)
{
Hlink p=NULL,q=NULL;
q=head;
p=head->next;
while(p!=NULL&&p->num!=num)
{
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
主函数部分的编写和调用
printf("please input delete num:\n");
scanf("%d",&num);
delete_node(head,num);
printf("delete:\n");
长度测量
函数定义
int length_node(Hlink head)
{
int i;
Hlink p=NULL;
p=head->next;
while(p)
{
i++;
p=p->next;
}
printf("the length is %d\n",i);
}
主函数部分的编写和调用
length_node(head);
链表清空以及释放头结点操作:
函数定义
void make_empty(Hlink head)
{
Hlink p=NULL;
p=head->next;
while(p!=NULL)
{
head->next=p->next;
free(p);
p=head->next;
}
}
void release_link(Hlink * head)
{
make_empty(*head);
free(*head);
*head=NULL;
}
主函数部分的编写和调用
make_empty(head);