链表创建节点用不用malloc ?

一,malloc函数简介

定义

void* malloc (size_t size);

作用

分配内存块,返回指向块开头的指针

参数

内存块的大小(以字节为单位)。
是无符号整型。size_t

返回值

成功时,指向函数分配的内存块的指针

二,何时使用或不使用malloc来获取一个新的单元?

 必须记住:声明指向一个结构的指针并不创建该结构,而只是给出足够的空间容纳结构可能会使用的地址。

另一方面:如果你想使用一个指针变量沿着一个表进行,那就没有必要创建新的结构。

 

总结一下:如果要创建一个新的节点或链表需要用malloc

如果只是指向原来的节点则不需要malloc,直接进行赋值就好。

举例:

#define ElemType int
struct Node{
	 ElemType data;
	struct Node * next; 
};

typedef struct Node  * PtrNode;

1,创建新的节点或链表。

/*创建一个带空节点的初始链表*/
PtrNode  initEmptyList(){
	PtrNode head = malloc(sizeof(struct Node));

	if ( head != NULL){
		head->next = NULL;
	} 
	return head;
}

 

/*把一个新节点插入到链表尾部*/
void insertEnd (PtrNode head, ElemType x){
	PtrNode p, tmp, cur;
	/*动态分配新节点,将新值存入*/

	p = malloc(sizeof(struct Node));

	if (p != NULL){
		p->data = x;	p->next = NULL;
		/*找到尾节点,记为前驱指针tmp*/
		tmp = getEnd(head) ;
		/*在尾节点后链接新节点*/
		tmp->next = p;
	}
	else printf("Not inserted. No memory avaliable.\n");

}

2, 只是指向原来的节点。

/*删除值为x的第一个节点,成功则返回1;否则返回0。*/
int deleteNode(PtrNode head, ElemType x)
{
    PtrNode tmp,cur;
    
    tmp=head;
    cur=head->next;
//这里就是没有用malloc,
    
    /*查找待删除节点,若找到,则由cur指向该节点*/
    while (cur!=NULL && x != cur->data ){ 
          tmp=cur;
          cur=cur->next;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值