c语言之simp _link

来源:互联网 发布:js window.open php 编辑:程序博客网 时间:2024/06/14 13:22

简单链表,还需完善!

#include <stdio.h>
#include <stdlib.h>

struct node
{
 int num;
 struct node * next;
};

typedef struct node Node;
typedef struct node * Link;

void create_link(Link * head)
{
 *head = NULL;
}

void insert_node_head(Link * head,Link new_node)
{
    new_node->next = *head;
 *head = new_node;
}

void display_node(Link head)
{
 Link tmp;
 tmp = head;

 while(tmp != NULL)
 {
  printf("num = %d\n",tmp->num);
  tmp = tmp->next;
 }
}

void is_malloc_ok(Link new_node)
{
     if(new_node == NULL)
 {
  printf("malloc error!\n");
  exit(-1);
  }
}

void create_newnode(Link * new_node)
{
 *new_node = (Link) malloc(sizeof(Node));
 is_malloc_ok(*new_node);
}

void insert_node_tail(Link *head,Link new_node)
{
    Link tmp;

 tmp = *head;

 if(*head == NULL)
 {
  new_node->next = *head;
  *head = new_node;
 }
 else
 {
  while(tmp->next != NULL)
  {
   tmp = tmp->next;
  }
  tmp->next = new_node;
  new_node->next = NULL;
 }
}

void insert_node_mid(Link *head,Link new_node,int num)
{
    Link tmp;
 tmp = *head;
   
 if(NULL == *head)
 {
  printf("link is empty!\n");
  return;
 }
 else
 {
     while(tmp->num != num && tmp->next != NULL)
     {
            tmp = tmp->next;
     }
        if(tmp->num == num)
  {
            new_node->next = tmp->next;
   tmp->next = new_node;
  }
  else
  {
   printf("no such node!\n");
  }
 }

}

void delete_node(Link *head,int num)
{
 Link tmp;
 Link p;
 tmp = p = *head;

 if(NULL == *head)
 {
  printf("link is empty!\n");
  return;
 }

 while(tmp->num != num && tmp->next != NULL)
 {
  p = tmp;
  tmp = tmp->next;
 }

 if(tmp->num == num)
 {
        if(tmp == *head)
  {
            *head = tmp->next;
   free(tmp);
  }
  else
  {
   p->next = tmp->next;
   free(tmp);
  }
 }
 else
 {
  printf("no such node!\n");
 }
}

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;
 int num;

 create_link(&head);

 for(i = 0; i < 10;i++)
 {
        create_newnode(&new_node);
  new_node->num = i;
  //insert_node_head(&head,new_node);
  insert_node_tail(&head,new_node);
 }

 printf("please input a num!\n");
 scanf("%d",&num);

// create_newnode(&new_node);
// new_node->num =  num;

// insert_node_mid(&head,new_node,10);
   
 delete_node(&head,num);

 display_node(head);
    return 0;
}


0 0
原创粉丝点击