版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a_studycx/article/details/82378820
#include <libxml/parser.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERR -1
struct inforNode
{
unsigned char name[20];
unsigned char number[10];
unsigned char age[3];
unsigned char country[20];
struct inforNode* pNext;
};
typedef struct inforNode InforNode;
typedef InforNode* Link;
void CreateLink(Link* pHead)
{
*pHead = (Link)malloc(sizeof(InforNode));
if(*pHead == NULL)
{
fprintf(stderr,"Malloc err\n");
}
(*pHead)->pNext = NULL;
}
void InsertNode(Link pHead,Link newNode)
{
Link temp = pHead;
while(temp->pNext != NULL)
{
temp = temp->pNext;
}
temp->pNext = newNode;
newNode->pNext = NULL;
}
int DeleteNode(Link pHead,unsigned char* dName)
{
Link ptr = pHead;
Link temp = ptr->pNext;
while(temp != NULL)
{
if(strcmp((const char*)temp->name,(const char*)dName) == 0)
{
ptr->pNext = temp->pNext;
free(temp);
temp = NULL;
return 0;
}
ptr = temp;
temp = temp->pNext;
}
return 0;
}
void DisplayNode(Link pHead)
{
if(pHead == NULL)
{
printf("Realsed\n");
}
Link temp = pHead->pNext;
if(pHead->pNext == NULL)
{
printf("Empty Link\n");
}
while(temp != NULL)
{
printf("%s %s %s %s\n",temp->name,temp->number,temp->age,temp->country);
temp = temp->pNext;
}
}
void FreeList(Link pHead)
{
Link temp = pHead->pNext;
while(temp->pNext != NULL)
{
pHead->pNext = temp->pNext;
free(temp);
//tempOne = NULL;
temp = pHead->pNext;
}
free(temp);
temp = NULL;
pHead->pNext = NULL;
free(pHead);
pHead = NULL;
}
//链表冒泡排序
void BubbleSortLink(Link pHead)
{
Link p = NULL;
Link q = NULL;
Link tail = NULL;
while(pHead->pNext != tail)
{
p = pHead;
q = pHead->pNext;
while(q->pNext != tail)
{
if(strcmp((const char*)q->name,(const char*)q->pNext->name) > 0)
{
p->pNext = q->pNext;
q->pNext = q->pNext->pNext;
p->pNext->pNext = q;
q = p->pNext;
}
q = q->pNext;
p = p->pNext;
}
tail = q;
}
}
int main()
{
xmlDocPtr doc;
xmlNodePtr curNode;
xmlNodePtr temp;
xmlChar* name;
xmlChar* number;
xmlChar* age;
xmlChar* country;
Link pHead = NULL;
CreateLink(&pHead);
Link newNode;
doc = xmlReadFile("CreateXmlInfo.xml","GB2312",XML_PARSE_RECOVER);
if(NULL == doc)
{
fprintf(stderr,"Document not parsed successfullly.\n");
exit(ERR);
}
curNode = xmlDocGetRootElement(doc);
if(NULL == curNode)
{
fprintf(stderr,"Empty document!\n");
xmlFreeDoc(doc);
exit(ERR);
}
if(xmlStrcmp(curNode->name,BAD_CAST"information"))
{
fprintf(stderr,"Document of wrong type,root node = information!\n");
xmlFreeDoc(doc);
exit(ERR);
}
curNode = curNode->children;
while(curNode != NULL)
{
newNode = (Link)malloc(sizeof(InforNode));
if(xmlHasProp(curNode,BAD_CAST"name"))
{
name = xmlGetProp(curNode,BAD_CAST"name");
memcpy(newNode->name,name,strlen((const char*)name)+1);
//printf("%s ",name);
xmlFree(name);
}
if(xmlHasProp(curNode,BAD_CAST"number"))
{
number = xmlGetProp(curNode,BAD_CAST"number");
memcpy(newNode->number,number,strlen((const char*)number)+1);
//printf("%s ",number);
xmlFree(number);
}
if(xmlHasProp(curNode,BAD_CAST"age"))
{
age = xmlGetProp(curNode,BAD_CAST"age");
memcpy(newNode->age,age,strlen((const char*)age)+1);
//printf("%s ",age);
xmlFree(age);
}
if(xmlHasProp(curNode,BAD_CAST"country"))
{
country = xmlGetProp(curNode,BAD_CAST"country");
memcpy(newNode->country,country,strlen((const char*)country)+1);
//printf("%s ",country);
xmlFree(country);
}
InsertNode(pHead,newNode);
curNode = curNode->next;
}
BubbleSortLink(pHead);
DisplayNode(pHead);
printf("Who do you want to delete?\n");
unsigned char deleteName[20];
scanf("%s",deleteName);
DeleteNode(pHead,deleteName);
DisplayNode(pHead);
FreeList(pHead);
DisplayNode(pHead);
xmlFreeDoc(doc);
return 0;
}