2014年11月10日 星期一

[演算法]Link List

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

typedef struct NodeData
{
 int data;
 struct NodeData *ptr;
 struct NodeData *PrePtr;
}LinkListData;


LinkListData* CreateNode(int data){
 LinkListData *ptr = malloc(sizeof(LinkListData));
 ptr->data = data;
 return ptr;
}

int InsertNode(LinkListData *LinkList , LinkListData *Node){
 Node->ptr = LinkList->ptr;
 Node->PrePtr = LinkList;
 LinkList->ptr = Node;
 return 0;
}

int PrintNode(LinkListData *LinkList)
{
 LinkListData *Node = LinkList;

 while(1){
  printf("Node data=%d \n",Node->data);
  if(NULL != Node->ptr){
   Node = Node->ptr;
  }else
   {
    break;
   }
 };
 
 return 0;
}

int DeleteLinkList(LinkListData *LinkList){

 LinkListData *FreePtr;
 LinkListData *NextPtr;

 if(NULL != LinkList)
  FreePtr = LinkList;
 else
  return 0;

 while(1){
  if(NULL != FreePtr->ptr)
   NextPtr = FreePtr->ptr;
  else
   NextPtr = NULL;

  if(NULL != FreePtr){
   printf("@@@ free address=%x\n",FreePtr);
   free(FreePtr);
   
   if(NULL != NextPtr)
    FreePtr = NextPtr;
   else
    break;
  }else
  break;
 } 
  
 
 return 0;
}

int DeleteNode(LinkListData *LinkList , LinkListData *Node){
 LinkListData *CurrentNode = LinkList;


 while(1){
  if(CurrentNode->data == Node->data){
   CurrentNode->PrePtr->ptr = CurrentNode->ptr;
   free(CurrentNode);
   break;
  }

  if(NULL == CurrentNode->ptr)
   break;

  CurrentNode = CurrentNode->ptr;
 }
 
 return 0;
}

int main(void){
 LinkListData *LinkList = CreateNode(1);
 
 LinkListData *a = CreateNode(2);
 LinkListData *b = CreateNode(3);
 LinkListData *c = CreateNode(4);

 printf("@@@@ haha check the address=%x_%x_%x_%x\n",LinkList,a,b,c);

 InsertNode(LinkList , c);
 InsertNode(c , a);
 InsertNode(LinkList , b);

 PrintNode(LinkList);

 DeleteNode(LinkList , a);
 
 PrintNode(LinkList);

 
 DeleteLinkList(LinkList);
 
 return 0;
}


 

沒有留言:

張貼留言