单向链表

1、alist.h

#ifndef _ALIST_H_
#define _ALIST_H_
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define HEAD 0
#define TAIL 1
#define DEL_D 0
#define DEL_F 1
typedef int data_t;
typedef struct node {
 data_t data;
 struct node *next;
}NODE;
int insert(NODE *L, data_t data, int offset, int flag);
int delet(NODE *L, data_t data, int offset, int flag);
int change(NODE *L, data_t new_data, data_t old_data);
NODE *find(NODE *L, data_t data);
void show(NODE *L);
#endif /* _ALIST_H_ */

2、alist.c

#include"alist.h"


NODE * create_node(data_t data)
{
 NODE *node = malloc(sizeof(NODE));
 node->data = data;
 node->next = NULL;
 return node;
}


int insert(NODE *L,data_t data,int offset,int flag)
{
 if(offset < 0)
  return -1;
 NODE *node = create_node(data);
 switch(flag)
 {
  case HEAD:
  {
   node->next = L->next;
   L->next = node;
  }
  break;
  case TAIL:
  {
   while(L->next != NULL)
    L = L->next;
    L->next = node;
  }
  break;
default :
  {
   while(offset--)
    if(L->next!=NULL)
     L = L->next;
    else 
     return -1;
   node->next = L->next;
   L->next = node;
  }
  break;  
 }

}

int delet(NODE *L,data_t data,int offset,int flag)
{
 if(flag < 0) return -1;
 
 switch(flag)
 {
  case DEL_D:
  {
   while(L->next)
   {
    if(L->next->data == data)
    {
     NODE *t = L->next;
     L->next = t->next;
     free(t);
     return 0;
    }
    L = L->next;
   }
   return -1;
  }
  break;
  case DEL_F:
  {
   offset--;
   while(offset--)
    if(L->next!=NULL)
     L = L->next;
    else 
     return -1;
   
   NODE *t = L->next;
   L->next = t->next;
   free(t);
   return 0;
  }
  break;
 }
}

int change(NODE *L,data_t new_data,data_t old_data)
{
 NODE *node = find(L,old_data);
 if(node != NULL)
 { 
  node->data = new_data;
  return 0;
 }
 else return -1;
}
NODE *find(NODE *L,data_t data)
{
 while(L->next)
 {
  if(L->next->data == data)
   return L->next;
  L = L->next;
 }
 return NULL;
}

void show(NODE *L)
{
 while(L->next){
  printf("%d ",L->next->data);
  L = L->next;
 }
  printf("\n");
}

3、main.c

#include"alist.h"
int main()
{
 NODE L = {0};
 int i = 10;
 while(i--)
  //insert(&L,i,1,0);
  insert(&L,i,1,1);
 show(&L);
 NODE *node = find(&L,5);
 if(node == NULL)
  printf("not data\n");
 else
  printf("%d\n",node->data);
 delet(&L,1,2,0);
 show(&L);
 change(&L,100,0);
 show(&L);
 insert(&L,12,4,3);
 show(&L);
 delet(&L,1,2,1);
 show(&L);
 return 0 ;
}

你可能感兴趣的:(单向链表)