資源簡介
雙向鏈表基本操作函數

代碼片段和文件信息
//關于雙向鏈表的基本操作
#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++程序
評論
共有 條評論