#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; }
2014年11月10日 星期一
[演算法]Link List
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言