头文件:
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int DataType;
typedef struct ListNode
{
struct ListNode* next;
DataType data;
}Node,*pNode,List,*pList;
void InitLinklist(pList* ppList);
pList buyNode(DataType d);
void pushback(pList* ppList,DataType d);
void printLinklist(pList pList);
void DestroyLinkList(pList* ppList);
void PopBack(pList* ppList);
void PushFront(pList* ppList, DataType d);
void PopFront(pList* ppList);
pNode Find(pList pList, DataType d);
函数实现:
#include"LinkList.h"
void InitLinklist(pList* ppList)
{
assert(ppList!=NULL);
*ppList=NULL;
}
pList buyNode(DataType d)
{
pNode p=(pNode)malloc(sizeof(Node));
if(p==NULL)
{
perror("BuyNode():malloc");
}
p->data=d;
p->next=NULL;
return p;
}
void pushback(pList* ppList,DataType d)
{
pList cul=*ppList;
assert(ppList !=NULL);
if(* ppList == NULL)
{
*ppList = buyNode(d);
}
else
{
while( (cul!=NULL) && ((cul->next) !=NULL ) )
{
cul=cul->next;
}
cul->next=buyNode(d);
}
}
void printLinklist(pList pList)
{
pNode p=pList;
if(p==NULL)
{
printf("没有节点\n");
return;
}
while(p)
{
printf("%d--",p->data);
p=p->next;
}
printf("over\n");
}
void DestroyLinkList(pList* ppList)
{
assert(ppList!=NULL);
while(*ppList!=NULL)
{
pNode cul=*ppList;
*ppList=(*ppList)->next;
free(cul);
}
*ppList=NULL;
}
void PopBack(pList* ppList)
{
assert(ppList!=NULL);
if(*ppList==NULL)
{
return;
}
if((*ppList)->next==NULL)
{
free(*ppList);
*ppList=NULL;
return;
}
else
{
pNode cul =*ppList;
while((cul->next)->next != NULL)
{
cul=cul->next;
}
free(cul->next);
cul->next=NULL;
}
}
void PushFront(pList* ppList, DataType d)
{
pNode cul=buyNode(d);
assert(ppList!=NULL);
if(*ppList==NULL)
{
*ppList=cul;
}
else
{
cul->next=*ppList;
*ppList=cul;
}
}
void PopFront(pList* ppList)
{
assert(ppList!=NULL);
if(*ppList==NULL)
return;
if((*ppList)->next==NULL)
{
free(*ppList);
*ppList=NULL;
}
else
{
pNode cul=*ppList;
*ppList=(*ppList)->next;
free(cul);
cul=NULL;
}
}
pNode Find(pList pList, DataType d)
{
pNode cul=pList;
if(pList==NULL)
return NULL;
while(cul->data !=d)
{
cul=cul->next;
}
if(cul != NULL)
{
printf("%d\n",cul->data);
pList=cul;
return pList;
}
return NULL;
}