#ifndef SCNODE_H #define SCNODE_H
typedef struct Node { int data; Node* next; }Node,*LinkList;
int initialize(LinkList& list); int cleanup(LinkList& list);
int insertData(LinkList& list, int data); int deleteData(LinkList& list, int data); int searchData(LinkList& list, int data); // return the index that first find
#endif
#include "scNode.h" #include <stdlib.h> #include <iostream>
using namespace std;
int initialize(LinkList& list) { int retval = 1; int headNumber = 0; Node* head = new Node; if (NULL != head) { head->data = headNumber; head->next = head; list = head; retval = 1; } else { retval = 0; } return retval; }
int cleanup(LinkList& list){ Node* head = list; Node* pNode = head; Node* deleteNode = NULL; int retval = 1; if (NULL == head) { retval = 1; } else { deleteNode = pNode->next; while (deleteNode != head) { pNode = deleteNode->next; delete deleteNode; deleteNode = pNode; } delete head; retval = 1; } return retval; }
int insertData(LinkList& list, int data) { static int nodeNumber = 0; Node* head = list; Node* pNode = head; Node* insertNode = new Node; int retval = 1; if (NULL != insertNode) { if (NULL == pNode) { retval = 0; } else { while (pNode->next != head) { pNode = pNode->next; } pNode->next = insertNode; insertNode->next = head; insertNode->data = data; nodeNumber++; head->data = nodeNumber; retval = 1; } } else { retval = 0; } return retval; }
int searchData(LinkList& list, int data) { Node* head = list; Node* pNode = head; Node* searchNode = NULL; int index = 1; if (NULL == head) { index = -1; } else { searchNode = pNode->next; while ((searchNode != head) && (searchNode->data != data)) { pNode = searchNode; searchNode = pNode->next; index++; } if (searchNode == head ) { index = 0; } } return index; }
int deleteData(LinkList& list, int data) { Node* head = list; Node* pNode = head; Node* deleteNode = head; int index = 0; int retval = 0; index = searchData(list, data); if ((-1 == index) || (0 == index)) { retval = 0; } else { for (int i = 0; i< index; i++) { pNode = deleteNode; deleteNode = pNode->next; } pNode->next = deleteNode->next; delete deleteNode; deleteNode = NULL; (head->data)--; retval = 1; } return retval; }

|