单链表:
NO.1 头插法
每次从表头插入新节点,具体过程:先开辟表头指针,然后陆续为每个数据元素开辟存储空间并赋值,让该节点作为首元节点,原来的首元节点作为他的后继节点。
接下来看看代码
第一是尾插法:
void createlist (node *h)//尾插法创建单链表
{
int num;
while(scanf("%d",&num),num!=0)
{
node *p =(node*)malloc(sizeof(node));
p->data=num;
h->next=p;
h=p;
}
h->next=NULL;
}
惊奇的发现 输出的时候是正序输出的
再来看看首插法:
void createlist (node *h)//首插法创建单链表
{
int num;
while(scanf("%d",&num),num!=0)
{
node *p =(node*)malloc(sizeof(node));
p->data=num;
p->next=h->next;
h->next=p;
}
}
这是效果:
这个是逆序输出;当然这些都可以调节的。
对于单链表的删除与插入就更简单啦 看看代码:
插入:
void insertlist(node *h)
{
printf("\n请输入需要插入在几个以及插入的数字\n");
int i,num,j=0;
scanf("%d %d",&i,&num);
node *pre=h;
while(j<i-1)
{
pre=pre->next;
j++;
}
node *p=(node*)malloc(sizeof(node));
p->data=num;
p->next=pre->next;
pre->next=p;
}
删除:
void bocklist(node*h)
{
printf("请输入需要删除的数字\n");
node *p,*pre=h;
int i,j=0;
scanf("%d",&i);
while(j<i-1)
{
pre=pre->next;
j++;
}
p=pre->next;
pre->next=p->next;
free(p);