动态链表
操作无名结构体变量
typedef struct LinkListNode
{
struct LinkLinkNode* next;
}LinkListNode;
typedef struct LinkList
{
LinkListNode header;
int length;
}LinkList;
LinkList* LinkList_Create()
{
LinkList *ret = NULL:
ret = (LinkList*)malloc(sizeof(LinkList));
memset(ret,0,sizeof(LinkList));
return ret;
}
void LinkList_Destory(LinkList* list)
{
if(list!=NULL)
{
free(list);
list = NULL;
}
retrun;
}
void LinkList_Clear(LinkList* list)
{
LinkList *tList = NULL;
if(list == NULL)
{
return ;
}
tList = (LinkList*)list;
tLink->length = 0;
tLink->header.next=NULL;
return ;
}
int LinkList_Insert(LinkList* list, LinkListNode* node,int pos)
{
int ret=0;
LinkListNode *current = NULL;
LinkList *tLink= NULL;
if(list==NULL||node==NULL||pos<0)
{
ret=0;
return ret;
}
tLink = (TLinkList *)list;
current = &(tLink->header);
for(i=0;i<pos;i++)
{
currrent=current->next;
}
node->next = current->next;
current->next = node;
retrun 0;
}
树(非线性结构)
一个直接前驱 可能有多个直接后继
性质
具有递归性 即 树中有树 m个互不相交的集合
术语
根:没有前驱 叶子:没有后继 森林:m棵不相交的树的集合 有序树:各节点子树从左到右有序 无序树:结点各子树可互换位置
双亲:parent 直接前驱 孩子:child 直接后继 兄弟: 同一双亲同层结点 堂兄弟:双亲位于同一层的结点 祖先:从根到该结点所经分支的所有结点 子孙:该结点下层子树的任一结点
结点:树的数据元素 结点的度:结点挂接的子树数
结点的层次:从根到该结点的层数 分支结点:除树根以外的结点
树的度:所有结点度的最大值 树的高度、深度:所有结点中最大的层数
树的表示法
图形表示
嵌套集合表示法
广义表表示法
目录表示法
左孩子右兄弟表示法
逻辑结构
一对多 多个直接后继 只有一个根节点 子树互不相交
存储结构
顺序存储 :从上到下 从左到右 链式存储 :多重链表 一个前驱指针 n个后继指针
|