- 单链表的结构体定义
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}listnode,*linklist;
listnode一般用于分配内存,*linklist一般用来定义头节点。
- 单链表的基本操作
单链表的创建1
linklist list_create()
{
linklist H;
if((H=(linklist)malloc(sizeof(listnode)))==NULL)
{
printf("malloc failed!\n");
return H;
}
H->data = 0;
H->next = NULL;
return H;
}
单链表的创建2
void InitList(LinkList* PHead)
{
if ((*PHead = (LinkList)malloc(sizeof(Node))) == NULL)
{
printf("内存申请失败!\n");
return;
}
(*PHead)->Next = NULL;
}
---------------------
作者:LiuBo_01
来源:CSDN
原文:https://blog.csdn.net/LiuBo_01/article/details/80230612
版权声明:本文为博主原创文章,转载请附上博文链接!
单链表的创建,形参必须是二级指针,使用的时候是一级指针取地址,不然的话在函数initlist中创建,主函数调用的时候给节点分配内存,如果不使用地址传递,调用结束局部变量就销毁了。
- 单链表的头插
int list_head_insert(linklist H,datatype value)
{
linklist p;
if((p=(linklist)malloc(sizeof(listnode)))==NULL)
{
printf("malloc failed\n");
return -1;
}
p->data = value;
p->next = H->next;
H->next = p;
return 0;
}
- 单链表的显示
void list_show(linklist H)
{
while(H->next)
{
printf("%d ",H->next->data);
H = H->next;
}
printf("\n");
}
- 单链表的头插
从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志(-1)为止。
void CreatFormHead(LinkList PHead)
{
DataType data;
Node* s; //要插入的结点指针
scanf("%d", &data);
while (data != -1) //输入要插入的值以-1作为结束标志
{
s = (Node*)malloc(sizeof(Node));
s->Data = data;
s->Next = PHead->Next;
PHead->Next = s;
scanf("%d", &data);
}
}
---------------------
作者:LiuBo_01
来源:CSDN
原文:https://blog.csdn.net/LiuBo_01/article/details/80230612
版权声明:本文为博主原创文章,转载请附上博文链接!