C语言之链表

链表:

  1. 链表的基本单元是节点。
  2. 节点分为两部分,数据域和指针域,所以节点为结构体变量类型
struct node
{
  int data;
  struct node* p_next;
}

struct node* createnode(void);
void move_node(struct node* node);
bool empty_node(struct node* node);

int main()
{
  struct node* begin_node;
  begin_node=createnode(); 
  move_node(begin_node);
  return 0;
}

创建链表

struct node* createnode()
{
  int len;
  int i;
  int val;
  struct node* p_head=(struct node*)malloc(sizeof(struct node));
  if(p_begin==NULL)
  {
    printf("error");
    exit(-1);
  }
  struct node* p_tail=p_head;
  p_tail->p_next=NULL;
  printf("please input the number of the linkst");
  scanf("%d",&len);
  for(;i<=len;i++)
 {
   printf("please input the value for the %dlink",i);
   scanf("%d",&val);
   struct node* p_new=(struct node*)malloc(sizeof(struct node));
   if(p_new==NULL)
   {
     printf("error");
     exit(-1);
   }
   p_new->data=val;
   p_tail->p_next=p_new;
   p_new->p_next=NULL;
   p_tail=p_new;
   
   } 
   return p_head;
   
}

 修改节点的值

void change(struct node* p_node,int n,int val)
{
  struct node* p_node2;
  int i=0;
  while(i<n)
 {
   i++;
   p_node2=p_node2->p_next; 
 }  
 if(p_node2=NULL)
 {
   printf("error");
   exit(-1) 
 }
 else
 {
    p_node2->data=val;
 }  
}

删除节点:把要删除的节点的指针域传给  前一个节点的指针域

void empty_link(struct node* p_node ,int n)
{
  struct node* p_temp;
  struct node* p_delete=p_node;
  int i=0;
  while(i<n && p_delete==NULL)
 {
   p_temp=p_delete;
   p_delete=p_delete->p_next;
   i++
 }
 if(p_delete!=NULL)
 {
   p_temo->p_next=p_delete->p_next;
 }
 else
{
  printf("errot");
  exit(-1);
  
}
 

}

添加节点:

void tianjian(struct node* p_node, int n, int val)
{
  //同上,找到第n-1个节点,把指针域传给插入的节点,
  // 插入节点的指针域传到下一节点
  //需要做的只是循环一下找到第n-1个节点和第n+1个节点。
}

猜你喜欢

转载自blog.csdn.net/weixin_40288381/article/details/81110327