链表

链表

动态化创建一个链表:动态内存申请+模块化设计

1创建链表(创建一个表头表示整个链表)

#include<stdio.h>
#include <stdlib.h> 
struct Node
{
	int data;				//数据域 
	struct Node* next;		//指针域 
};
struct Node* creatList()
{
	struct Node*headNode=(struct Node*)malloc( sizeof (struct N) ); 
	//动态内存申请,指针变成变量 
	//headNode变成了结构体变量 
 	//变量使用前初始化
	headNode->next = NULL;
	return headNode 
 
 }  

int main()
{
	struct Node* list=creatList();
	//创建链表 
	return 0;
 } 

2创建节点(用来形成新的节点)

节点——结构体变量(通过指针来表示)

struct Node*creatNode(int data)
{
	struct Node*newNode = (struct Node*)malloc( sizeof (struct Node));
	newNode->data = data;
	newNode->next = NULL;
	return newNode; 
 } 

3插入节点
(头插法)

						//插入哪个链表,插入节点的数据是多少 
void insertNodeByHead(struct Node* headNode,int data) 
{
	struct Node* newNode = creatNode(data);	//创建插入节点 
	newNode->next=headNode->next;			//newNode的next指向headNode的next 
	headNode->next=newNode;             	//headNode的next指向newNode
	
 } 

例题:函数Creatlink()的功能是创建带头节点的单向链表,并为各个节点数据域赋0~m-1的值

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  NODE  *h=NULL, *p, *s;
   int  i;
/**********found***********/
   p=(NODE )malloc(sizeof(NODE));	//错误,改为p=(NODE*)malloc(sizeof(NODE);
   h=p;
   p->next=NULL;
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));
      s->data=rand()%m;      s->next=p->next;
      p->next=s;             p=p->next;
   }
/**********found***********/
   return  p;						//错误,改为 return h;
}
void outlink(NODE  *h)
{  NODE  *p;
   p=h->next;
   printf("\n\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  printf("->%d ",p->data);
      p=p->next;
   }
   printf("\n");
}
void main()
{  NODE  *head;
   head=Creatlink(8,22);
   outlink(head);
}

*补充 :-> (指向运算符)
“->”是一个整体,它是用于指向结构体子数据的指针,用来取子数据。
换种说法,如果在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。

#include<stdio.h>
#include <stdlib.h> 
 
 struct Data
 {
 	int a,b,c;
  } ;						//定义结构体
  
 int main()
 {
 struct Data * p;			//定义结构体指针
 struct Data A = {1,2,3};	//申明变量A
 int x;
 p = &A;					//让p指向A
 x = p->a;					//取出p所指向的结构题中的a的值然后将值赋给x,所以x=1
 printf("%d",x);
 	return 0;
 }

输出结果 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值