本文目录一览:
c语言数据结构,单链表中的头插法求解释
L这个头结点是不存储数据的,L-next L的下个结点才存储数据,为实际的第一个结点
s-next=L-next 新插入的结点s放在第一个结点前面,变为新的第一个结点,L-next=s 这句让L-next指向新的第一个结点
L-next改为L s-next=L ,L=s可以,这样头指针就是实际存储数据的第一个结点
C语言 头插法建立链表
#include
stdio.h
#include
stdlib.h
typedef
struct
_list
{
int
val;
struct
_list*
next;
}
*node,
list;
//
在pos位置之后插一个节点,pos为空则在头部插入
node
insert(
node*
head,
node
pos,
int
val
)
{
node
tmp;
tmp
=
(
node
)malloc(
sizeof(
list
)
);
tmp-val
=
val;
tmp-next
=
pos
?
pos-next
:
*head;
return
(
pos
?
pos-next
:
*head
)
=
tmp;
}
//
从数组简单构造一个链表
node
create(
int*
beg,
int*
end
)
{
node
head
=
null;
while
(
beg
!=
end
)
{
insert(
head,
null,
*beg++
);
//
在头部插入
}
return
head;
}
//
遍历输出各个节点的值
void
print(
node
head
)
{
while
(
head
)
{
printf(
"%d
",
head-val
);
head
=
head-next;
}
putchar(
'\n'
);
}
int
main()
{
int
a[]
=
{
0,1,2,3,4,5,6,7,8,9
};
node
head;
head
=
create(
a,
a
+
10
);
print(
head
);
return
0;
}
单链表(C语言)头插法的建立和输出问题
//程序有多处改动,烦请将该程序另存,对比修改前后的差别
/*
1、头部无数据,则在链表中,浪费头结点;
2、头部有数据,则在链表中,浪费最后一个结点;
3、头部无数据结点思想:将新结点挂在头结点后面,将新数据存放在新结点中;
4、头部有数据结点思想:将新结点挂在头结点后面,将新数据存放在头结点中;
*/
#include stdio.h
#include stdlib.h
#define N 5
struct Node {
int Data; /* 存储结点数据 */
struct Node * Next; /* 指向下一个结点的指针 */
};
typedef struct Node List; /* 定义单链表类型 */
void headinsert(List * L);
void display( List * L );
void headinsert2(List * L);
void display2( List * L );
int main()
{
List *L1,*L2;
L1=(List *)malloc(sizeof(struct Node));
L2=(List *)malloc(sizeof(struct Node));
printf("头部含数据:");
headinsert(L1);
display(L1);
printf("\n");
printf("头部含数据:");
headinsert2(L2);
display2(L2);
printf("\n");
return 0;
}
void headinsert(List *L)//头部无数据
{
int i;
List * p;
// scanf("%d", N);
L-Next=NULL;
for ( i=0; iN; i++ )
{
p = (List *)malloc(sizeof(struct Node));
p-Data=i+1;
p-Next = NULL;
L-Next = p; //此处有改动,否则,后面一个结点插入到前一个结点的前面了
L = L-Next ;
}
}
void display( List *L )
{
List *p;
p=L-Next;
while(p!=NULL)
{
printf("%d ",p-Data);
p=p-Next;
}
}
void headinsert2(List *L)//头部有数据
{
int i;
List * p;
//scanf("%d", N);
L-Next = NULL;
for ( i=0; iN; i++ )
{
p = (List *)malloc(sizeof(struct Node));
L-Next = p;
L-Data=i+2; //+2以示区别
L = L-Next;
p -Next = NULL;
}
}
void display2( List *L )
{
List *p;
p=L;
while(p-Next!=NULL)//此处改为p-Next!=NULL,否则会有一个垃圾数
{
printf("%d ",p-Data);
p=p-Next;
}
}