91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-03
  • 語言: C/C++
  • 標(biāo)簽: 泛型鏈表??

資源簡介

使用C語言實現(xiàn)的“泛型鏈表”,該鏈表為循環(huán)雙鏈表,它的設(shè)計參考了C++的STL容器庫中的容器list及泛型算法的接口,并使用迭代器來遍歷鏈表。使用時只需要include頭文件即可,隱藏了List類型的具體實現(xiàn)。用戶并不需要知道鏈表的具體實現(xiàn),只需要調(diào)用頭文件中的接口來進行相應(yīng)的操作即可。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?“l(fā)ist_v2.h“

typedef?struct?node
{
????//循環(huán)雙鏈表的結(jié)點結(jié)構(gòu)
????void*?data;//數(shù)據(jù)域指針
????struct?node?*next;//指向當(dāng)前結(jié)點的下一結(jié)點
????struct?node?*last;//指向當(dāng)前結(jié)點的上一結(jié)點
}Node;

struct?list
{
????struct?node?*head;//頭指針,指向頭結(jié)點
????int?data_size;//鏈表對應(yīng)的數(shù)據(jù)所占內(nèi)存的大小
????int?length;//鏈表list的長度
};

static?Node*?Position(List?list?int?index);
static?Node*?NewNode(int?data_size);
static?void?linkNodeToList(List?list?Node?*node?Node?*next_node);
static?int?RemoveNode(List?list?Node?*node);

int?InitList(List?*list_ptr?int?data_size)
{
????/***
????函數(shù)功能:初始化鏈表數(shù)據(jù)域所占內(nèi)存的大小由data_size給出
????***/

????List?new_list?=?(List)malloc(sizeof(struct?list));
????*list_ptr?=?new_list;
????if(new_list?==?NULL)
????????return?-1;

????Node?*node?=?(Node*)malloc(sizeof(Node));
????if(node?==?NULL)
????{
????????free(new_list);
????????*list_ptr?=?NULL;
????????return?-1;
????}
????//把頭結(jié)點的數(shù)據(jù)域指針置為空
????node->data?=?NULL;
????//使其指針指向自身
????node->next?=?node;
????node->last?=?node;
????//設(shè)置list的頭指針、數(shù)據(jù)所占內(nèi)存的大小和長度
????(*list_ptr)->head?=?node;
????(*list_ptr)->data_size?=?data_size;
????(*list_ptr)->length?=?0;
????return?0;
}

Iterator?Append(List?list?void?*data
????????????????void?(*assign)(void*?const?void*))
{
????/***
????函數(shù)功能:把data的內(nèi)容插入到鏈表list的末尾
????????assign指定數(shù)據(jù)data間的賦值方法
????***/

????//調(diào)用Insert函數(shù)實現(xiàn),插入位置為end
????return?Insert(list?data?End(list)?assign);
}

static?void?linkNodeToList(List?list?Node?*node?Node?*next_node)
{
????/***
????函數(shù)功能:把node連接到next_node之前
????***/
????Node?*last_node?=?next_node->last;
????//把node連接入list中
????//設(shè)置相關(guān)的結(jié)點的next指針
????last_node->next?=?node;
????node->next?=?next_node;
????//設(shè)置相關(guān)結(jié)點的last指針
????next_node->last?=?node;
????node->last?=?last_node;
????//把node的值連入list后,list的長度加1
????++list->length;
}

static?int?RemoveNode(List?list?Node?*node)
{
????/***
????函數(shù)功能:從list中,移除node結(jié)點,但并不free
????????注意,并不free結(jié)點,只是把結(jié)點從鏈中分離
????***/
????if(node?==?list->head)
????????return?-1;//不移除頭結(jié)點
????Node?*next_node?=?node->next;
????Node?*last_node?=?node->last;
????//使結(jié)點node從list中分離
????next_node->last?=?last_node;
????last_node->next?=?next_node;
????//分享后,list的長度減1
????--list->length;
????return?0;
}

static?Node*?Position(List?list?int?index)
{
????/***
????函數(shù)功能:返回第index個結(jié)點的指針
????***/
????Node?*node?=?NULL;
????int?i?=?0;
????//如果index比長度的一半小,則從前往后找
????if(index?<=?list->length>>1)
????{
????????//設(shè)置node初值
????????node?=?list->head->next;
????????for(i?=?0;?i?????????{
????????????node?=?node->next;//向后移一個結(jié)點
????????}
????}
????//否則從后往前找
????else
????{
????????node?=?list->head;//設(shè)置node初值
????????for(i?=?list->length;?i?>?index;?--i)
????????{
????????????node?=?node->last;//向前移一個結(jié)點
????????}
????}
????return?node;
}

static?Node*?NewNode(int?data_size)
{
????/***
????函數(shù)功能:新建一個結(jié)點,并返回結(jié)點的指針,
????????結(jié)點由兩部分組成,一部分是結(jié)點本身,
????????一部分為data指針指向的數(shù)據(jù)域空間
????????數(shù)據(jù)所占的內(nèi)存空間由參數(shù)d

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-01-24?23:25??List\
?????文件????????9991??2014-01-19?00:10??List\list_v2.c
?????文件????????2874??2013-12-08?19:03??List\list_v2.h

評論

共有 條評論

相關(guān)資源