资源简介
双向链表基本操作函数
代码片段和文件信息
//关于双向链表的基本操作
#include
#include
#define MAXLIST 50
typedef enum boolean{FALSE TRUE} Boolean;
typedef char ListEntry;
//节点的声明
typedef struct listnode
{
ListEntry entry; //数据项
struct listnode *next; //指向下一项的指针
struct listnode *previous; //指向前一项的指针
}ListNode;
//链表的声明
typedef int Position;
typedef struct list
{
int count; //链表中一共有多少项
ListNode *current; //指向链表当前位置的指针
Position currentpos; //当前位置指针
}List;
/***********************************函数原型声明********************************************************/
void Error(char *s);
//定位双向链表的指针位置
void SetPosition(Position p List *list);
//在双向链表中插入一项
void InsertNode(Position p ListEntry x List *list);
//向系统申请节点内存函数
ListNode *MakeListNode(ListEntry x);
//删除双向链表的一个节点
void DeleteNode(Position p ListEntry *x List *list);
//创建一个双向链表
void CreateList(List *list);
//替换双向链表一个节点中的数据
void ReplaceNode(Position p ListEntry x List *list);
//取回双向链表一个节点的数据
void RetrieveNode(Position p ListEntry *x List *list);
//清除双向链表
void ClearList(List *list);
//链表是否为空
Boolean ListEmpty(List *list);
//链表的大小
int ListSize(List *list);
//遍历链表,利用函数指针逐一处理链表数据项
void TraverseList(List *listvoid(*Visit)(ListEntry x) );
//显示节点数据项目
void ShowItem(ListEntry x);
/***********************************函数定义*************************************************************/
void Error(char *s)
{
printf(“%s\n“s);
}
//遍历链表,利用函数指针逐一处理链表数据项
void TraverseList(List *listvoid(*Visit)(ListEntry x) )
{
int i;
ListNode *current;
if(list->count==0)
{ Error(“链表为空“); goto END; }
SetPosition(0list);
current=list->current;
for(i=0; i<=list->count-1; i++)
{
(*Visit)(current->entry);
current=current->next;
}
printf(“\n“);
END:
;
}
//显示节点数据项
void ShowItem(ListEntry x)
{
printf(“%c“x);
}
int ListSize(List *list)
{
return(list->count);
}
Boolean ListEmpty(List *list)
{
if(list->count==0)
return TRUE;
else
return FALSE;
}
Boolean ListFull(List *list)
{
if(list->count==MAXLIST)
return TRUE;
else
return FALSE;
}
//清除双向链表
void ClearList(List *list)
{
int i;
ListNode *DelNode;
if(list->count==0) goto END;
SetPosition(0list);
for(i=0; i<=list->count-1; i++)
{
DelNode=list->current;
list->current=list->current->next;
free(DelNode);
}
list->count=0;
list->current=NULL;
list->currentpos=-1;
END:
;
}
//取回双向链表一个节点的数据
void RetrieveNode(Position p ListEntry *x List *list)
{
//首先判断链表是否为空
if(list->count==0)
{ Error(“链表为空“); goto END; }
if(p<0 || p>=list->count)
{ Error(“要操作的位置超过链表范围“); goto END; }
SetPosition(plist);
*x=list->current->entry;
END:
;
}
//替换双向链表一个节点中的数据
void ReplaceNode(Position p ListEntry x List *list)
{
//首先判断链表是否为空
if(list->count==0)
{ Error(“链表为空“); goto END; }
if(p<0 || p>=list->count)
{ Error(“要操作的位置超过链表范围“); goto END; }
SetPosition(plist);
list->curre
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 172136 2017-05-02 10:57 P164_List\Debug\P164_List.exe
文件 230588 2017-05-02 10:57 P164_List\Debug\P164_List.ilk
文件 14600 2017-05-02 10:57 P164_List\Debug\P164_List.obj
文件 184788 2017-05-01 18:12 P164_List\Debug\P164_List.pch
文件 435200 2017-05-02 10:57 P164_List\Debug\P164_List.pdb
文件 33792 2017-05-02 10:57 P164_List\Debug\vc60.idb
文件 53248 2017-05-02 10:57 P164_List\Debug\vc60.pdb
文件 6989 2017-05-02 10:58 P164_List\P164_List.c
文件 4385 2017-05-01 18:12 P164_List\P164_List.dsp
文件 543 2017-05-01 18:10 P164_List\P164_List.dsw
文件 50176 2017-05-02 10:59 P164_List\P164_List.ncb
文件 53760 2017-05-02 10:59 P164_List\P164_List.opt
文件 1346 2017-05-02 10:57 P164_List\P164_List.plg
文件 78 2017-05-02 10:59 P164_List\注释文件.txt
目录 0 2017-05-02 11:00 P164_List\Debug
目录 0 2017-05-02 11:00 P164_List
----------- --------- ---------- ----- ----
1241629 16
- 上一篇:网络电话_源代码_C语言编写的
- 下一篇:列主元LU分解 C++程序
评论
共有 条评论