C语言实现单链表(LinkedList)

  

采用Linux内核链表的实现思想,通过业务节点包含链表节点来将数据串起来。
 C语言实现单链表(LinkedList)
linkedList.h

  
 <代码>的ifndef LINKED_LIST_H
  #定义LINKED_LIST_H
  # include
  # include
  # include
  
  typedef struct LinkedListNodeStruct {
  struct LinkedListNodeStruct *下;
  }LinkedListNode;
  
  typedef struct LinkedListStruct {
  LinkedListNode头;
  int长度;
  }LinkedList;
  
  LinkedList * LinkedList_Create ();
  
  空白LinkedList_Destory (LinkedList *列表);
  
  空白LinkedList_Clear (LinkedList *列表);
  
  int LinkedList_Length (LinkedList *列表);
  
  int LinkedList_Insert (LinkedList *列表,LinkedListNode *节点,int pos);
  
  LinkedListNode * LinkedList_Get (LinkedList *列表,int pos);
  
  LinkedListNode * LinkedList_Delete (LinkedList *列表,int pos);
  
  # endif//! LINKED_LIST_H
   之前
  

linkedList.c   

 <代码> # include“linkedList.h”
  
  LinkedList * LinkedList_Create () {
  LinkedList *列表=malloc (sizeof (LinkedList));
  memset(列表,0,sizeof (LinkedList));
  列表→长度=0;
  →列表头。下一个=零;
  返回列表;
  }
  
  空白LinkedList_Destory (LinkedList *列表){
  如果(列表!=NULL) {
  免费(列表);
  列表=零;
  }
  }
  
  空白LinkedList_Clear (LinkedList *列表){
  如果(列表!=NULL) {
  列表→长度=0;
  →列表头。下一个=零;
  }
  }
  
  int LinkedList_Length (LinkedList *列表){
  如果(列表!=NULL) {
  返回列表→长度;
  }
  }
  
  int LinkedList_Insert (LinkedList *列表,LinkedListNode *节点,int pos) {
  如果(列表==NULL | | pos & lt;0 | |节点==NULL) {
  返回1;
  流(stderr,“错误的论点。\ n”);
  }
  LinkedListNode * cur=,列表→头;
  
  int i=0;
  虽然(我& lt;pos和,坏蛋→下一个!=NULL) {
  坏蛋=cur→下;
  我+ +;
  }
  节点→下=cur→下;
  坏蛋→下=节点;
  列表→长度+ +;
  返回0;
  }
  
  LinkedListNode * LinkedList_Get (LinkedList *列表,int pos) {
  如果(列表==NULL | | pos & lt;0){
  返回NULL;
  流(stderr,“错误的论点。\ n”);
  }
  LinkedListNode * cur=,列表→头;
  int i=0;
  虽然(我& lt;pos和,坏蛋→下一个!=NULL) {
  坏蛋=cur→下;
  我+ +;
  }
  返回cur→下;
  }
  
  LinkedListNode * LinkedList_Delete (LinkedList *列表,int pos) {
  如果(列表==NULL | | pos & lt;0){
  返回1;
  流(stderr,“错误的论点。\ n”);
  }
  LinkedListNode * cur=,列表→头;
  int i=0;
  虽然(我& lt;pos和,坏蛋→下一个!=NULL) {
  坏蛋=cur→下;
  我+ +;
  }
  LinkedListNode * r=cur→下;
  坏蛋→下=cur→下一步→下;
  列表→长度,;
  返回r;
  } 
  

测试代码:

  
 <代码> # include
  # include
  # include“linkedList.h”
  
  typedef struct BusinessNodeStruct {
  LinkedListNode节点;
  int id;
  char[30]名称;
  }BusinessNode;
  int main () {
  
  LinkedList *列表=LinkedList_Create ();
  BusinessNode t1={“Beijing1 NULL, 21日};
  BusinessNode t2={" Beijing2 NULL, 31日};
  BusinessNode t3={NULL, 41岁的“Beijing3”};
  BusinessNode t4={NULL, 51岁,Beijing4 "};
  LinkedList_Insert(列表,(LinkedListNode *), t2, 0);
  LinkedList_Insert(列表,和t3。节点,0);
  LinkedList_Insert(列表,(LinkedListNode *)和t4, 0);
  
  for (int i=0;我& lt;列表→长度;我+ +){
  BusinessNode * bNode=(BusinessNode *) LinkedList_Get(列表,我);
  printf (" bNode→名称:% s, bNode→id: % d \ n”, bNode→名称、bNode→id);
  }
  LinkedList_Delete(清单1);
  printf(" - - - - - - - - - - - -删除- - - - - - - - - - - -”);
  for (int i=0;我& lt;列表→长度;我+ +){
  BusinessNode * bNode=(BusinessNode *) LinkedList_Get(列表,我);
  printf (" bNode→名称:% s, bNode→id: % d \ n”, bNode→名称、bNode→id);
  }
  
  系统(“暂停”);
  返回0;
  } 
  

linkedList.c

C语言实现单链表(LinkedList)