抽象数据类型(链表)

来源:互联网 发布:自定义整理相册软件 编辑:程序博客网 时间:2024/04/30 18:39

ADT.h

#ifndef LIST_H_#define LIST_H_#include <stdlib.h>#include <stdio.h>#include <string.h>#define TSIZE 45typedef struct film{char title[TSIZE];int rating;}Item;typedef struct node{Item item;struct node *next;}Node;typedef struct{Node *head;Node *tail;}List;///typedef Node* List;void InitializeList(List *plist);bool ListIsEmpty(const List *plist);bool ListIsFull(const List *plist);bool AddItem(Item item, List *plist);void Traverse(const List *plist, void(*pfun)(Item));void EmptyTheList(List *plist);unsigned int ListItemCount(const List list);void Print(const List list);#endif

ADT.c

#include "ADT.h"void InitializeList(List *plist){plist->head = NULL;plist->tail = NULL;}bool ListIsEmpty(const List *plist){if(plist->head == NULL)return 1;elsereturn 0;}bool ListIsFull(const List *plist){return 0;}bool AddItem(Item item, List *plist){Node* p = plist->tail;if(!p){p = (Node*)malloc(sizeof(Node));plist->head = p;plist->tail = p;}else{p->next = (Node*)malloc(sizeof(Node));p = p->next;plist->tail = p;}strcpy_s(p->item.title, item.title);p->item.rating = item.rating;p->next = NULL;return 0;}void EmptyTheList(List *plist){Node *psave;while(plist->head){psave = plist->head->next;free(plist->head);plist->head = psave;}plist->tail = NULL;}void Traverse(const List *plist, void(*pfun)(Item item)){Node* p = plist->head;while (p){(*pfun)(p->item);p = p->next;}}unsigned int ListItemCount(const List list){unsigned int count = 0;Node* p = list.head;while(p != NULL){count++;p = p->next;}return count;}void Print(const List list){const Node *p = list.head;while(p){printf("title = %s, rating = %d\n", p->item.title, p->item.rating);p = p->next;}}

main.c

#include "ADT.h"void print2(Item item){printf("title = %s, rating = %d\n", item.title, item.rating);}int main(){List movies;Item tmp;InitializeList(&movies);strcpy_s(tmp.title, "hello");tmp.rating = 99;AddItem(tmp, &movies);strcpy_s(tmp.title, "world");tmp.rating = 95;AddItem(tmp, &movies);strcpy_s(tmp.title, "!");tmp.rating = 90;AddItem(tmp, &movies);if(ListIsEmpty(&movies))printf("the list is empty\n");elseprintf("the list is not empty\n");printf("the list count = %d\n", ListItemCount(movies));Traverse(&movies, print2);printf("\n");//Print(movies);EmptyTheList(&movies);printf("the list count = %d\n", ListItemCount(movies));if(ListIsEmpty(&movies))printf("the list is empty\n");elseprintf("the list is not empty\n");Traverse(&movies, print2);//Print(movies);return 0;}

0 0