单链表的基本概念和操作

  • 单链表的结构体定义
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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/apanying/article/details/86522406