今天给大家带来的是C 语言中的ADT 中的一个列表的问题:
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
//#include <stdbool.h>
#define bool int
#define false 0
#define true 1
//特定于程序的声明
#define TSIZE 45
struct film
{
char title[TSIZE];
int rating;
};
//一般类型定义
typedef struct film Item;
typedef struct node
{
Item item;
struct node * next;
} Node;
typedef Node * List;
//函数原型
//操作:初始化一个列表
//操作前:plist 指向一个列表
//操作后:该列表被初始化为空列表
void InitializeList(List * plist);
//函数原型
//操作:确定列表是否为空列表
//操作前:plist指向一个列表
//操作后:如果该列表为空返回true,否则返回false
bool ListIsEmpty (const List * plist);
//函数原型
//操作:确定列表是否已满
//操作前:plist指向一个已初始化的列表
//操作后:如果该列表为满返回true,否则返回false
bool ListIsFull (const List * plist);
//函数原型
//操作:确定列表中项目的个数
//操作前:plist指向一个已初始化的列表
//操作后:返回该列表中项目的个数
unsigned int ListItemCount(const List * plist);
//函数原型
//操作:在列表尾部添加一个项目
//操作前:item是要被增加到列表的项目
// plist指向一个已初始化的列表
//操作后:如果可能的话,在列表尾部添加一个新项目,
// 函数返回true,否则返回false
bool AddItem (Item item,List * plist);
//函数原型
//操作:把函数作用于列表中的每一个节点的操作
//操作前:plist指向一个已初始化的列表
// pfun指向一个函数,该函数接受
// 一个Item参数并且无返回值
//操作后:pfun指向的函数被作用到列表中的每一个项目一次
void Traverse (const List *plist,void (* pfun) (Item item));
//函数原型
//操作:释放已分配的内存
//操作前:plist指向一个已初始化的列表
//操作后:为该列表分配的内存以释放,并且该列表被置为空列表
void EmptyTheList(List * plist);
#endif // LIST_H_INCLUDED
List.c
static void CopyToNode(Item item,Node * pnode);
void InitializeList(List * plist)
{
*plist = NULL;
}
//函数原型
//操作:确定列表是否为空列表
//操作前:plist指向一个列表
//操作后:如果该列表为空返回true,否则返回false
bool ListIsEmpty (const List * plist)
{
if( *plist == NULL)
return true;
else
return false;
}
//函数原型
//操作:确定列表是否已满
//操作前:plist指向一个已初始化的列表
//操作后:如果该列表为满返回true,否则返回false
bool ListIsFull (const List * plist)
{
Node * pf;
pf = (List) malloc(sizeof(Node));
// if(pf)
// return true;
// else//不能这样写,因为pf != NULL ,也不能说明了pf为真。
// return false;
if(pf == NULL)
return true;
else
return false;
}