当前位置: 首页 > wzjs >正文

做企业网站需要买什么资料湖南网站建设公司 尖端磐石网络

做企业网站需要买什么资料,湖南网站建设公司 尖端磐石网络,定制车需要多少钱,微信分销网站建设多少钱一、树(一对多) 1.树的定义 树:n(n>0)个结点的有限集合。n 0 ,空树。 2.在任意一个非空树中, (1),有且仅有一个特定的根结点 (2),当n>1 时,其余结点可分为m个…

一、树(一对多)

1.树的定义

树:n(n>=0)个结点的有限集合。n = 0 ,空树。

2.在任意一个非空树中,

(1),有且仅有一个特定的根结点

(2),当n>1 时,其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm,其中每一个

集合又是一个树,并且称谓子树。

3.度

结点拥有子树的个数称谓结点的度。度为0的结点称谓叶结点。度不为0,称谓分支结点。

树的度数是指,这棵树中,最大的结点的度数,称谓树的度数。

树的深度或高度,从根开始,根为第一层,根的孩子为第二层。

4.树的存储,顺序结构,链式结构。

二、二叉树 binary tree

1.定义

n个结点的有限集合,集合要么为空树,要么由一个根结点和两棵互不相交,分别称谓根结点的左

子树和右子树的二叉树组成。

相交:D-E  

2.特点

(1),每个结点最多两个子树。

(2),左子树和右子树是有顺序的,次序不能颠倒。

(3),如果某个结点只有一个子树,也要区分左,右子树。

3.特殊的二叉树

(1),斜树,所有的结点都只有左子树,左斜树,所有结点都只有右子树,右树。

(2),满二叉树,所有的分支结点都存在左右子树,并且叶子都在同一层上。

(3),完全二叉树,对于一颗有n个结点的二叉树按层序编号,如果编号i(1<=i<=n)的结点于同样

深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这可树为完全二叉树。

4.特性(选填
(1),在二叉树的第i层上最多有2^(i-1)个结点 i>=1

(2),深度为k的二叉树至多有2^k  -1 个结点 k>=1

(3),任意一个二叉树T,如果其叶子结点的个数是n0,度数为2的结点数为n2, n0 = n2 +1;

(4),有n个结点的完全二叉树深度为(logn/log 2) +1;

        注:向下取整

5.树的遍历

(1)广度遍历:层序

(2)深度遍历

        前序,根左右,先访问根,然访问左,访问右。

        中序,左根右,先从根开始(不是先访问根),从左开始访问,在访问根,在访问右结点。

        后序,左右根,先从根开始(不是先访问根),先访问左,在访问右。在访问根。

三、树的链式存储的一般操作 

1.创建

void CreateTree(TreeNode **root)
{char c = data[ind++];if('#'==c){*root=NULL;return;}else{*root = malloc(sizeof(TreeNode));if(NULL == *root){fprintf(stderr, "CreateTree malloc error");return ;}(*root)->data=c;CreateTree(&(*root)->left);CreateTree(&(*root)->rigjt);}
}

2.前序

void PreOrderTraverse(TreeNode*root)
{if(NULL == root){return;}printf("%c",root->data);PreOrderTraverse(root->left);PreOrderTraverse(root->rigjt);
}

3.中序

void InOrderTraverse(TreeNode*root)
{if(NULL == root){return;}InOrderTraverse(root->left);printf("%c",root->data);InOrderTraverse(root->rigjt);
}

4.后序

void PostOrderTraverse(TreeNode*root)
{if(NULL == root){return;}PostOrderTraverse(root->left);PostOrderTraverse(root->rigjt);printf("%c",root->data);
}

5.销毁

void DestoryTree(TreeNode *root)
{if(NULL == root){return;}DestoryTree(root->left);DestoryTree(root->rigjt);free(root);
}

四、哈希表

1.创建

HSTable*CreateHsTable(int len)
{HSTable*hs = malloc(sizeof(HSTable));if(NULL == hs){fprintf(stderr, "CreateHsTable malloc error");return NULL;}hs->head = malloc(sizeof(DATATYPE)*len);if(NULL == hs->head){fprintf(stderr, "CreateHsTable malloc2 error");return NULL;}    hs->tlen =len;int i=0;for(i =0;i<len;i++){hs->head[i]=-1;}return hs;
}

2.HSFun

int HSFun(HSTable*hs,DATATYPE*data)
{return *data % hs->tlen;
}

3.插入

int HSInsert(HSTable*hs,DATATYPE*data)
{int ind=HSFun(hs, data);while(hs->head[ind]!=-1){printf("pos %d,num :%d\n",ind,*data);ind =(ind+1)%hs->tlen;}hs->head[ind]=*data;return 0;}

4.查找

int HsSearch(HSTable*hs,DATATYPE*data)
{int ind=HSFun(hs, data);int old_ind=ind;while(hs->head[ind]!=*data){ind =(ind+1)%hs->tlen;if(old_ind==ind){return -1;}}return ind;
}

5.main.c

int main(int argc, char **argv)
{HSTable*hs=CreateHsTable(15);int array[]={12,67,56,16,25,37,22,29,15,47,48,34};int i = 0;for (i = 0; i < 12; i++){HSInsert(hs, &array[i]);}int want_num = 37;int ret = HsSearch(hs, &want_num);if (-1 == ret){printf("not find \n");}else{printf("find ,%d\n", hs->head[ret]);}return 0;
}

五、内核链表(双向链表)

 思想:将数据摘出来,没有耦合,需自己定义结构体,结构体内部包括节点和数据,可按照自己的

            需求设计

Linux第一宏:offset(地址偏移量) 和 contrainof(求地址)

相关操作:

1.klist.c

#include "./klist.h"void klist_init(KLIST* head)
{head->prev = head;head->next = head;
}void klist_add(KLIST* newnode,KLIST*prev,KLIST* next)
{newnode->next =next;newnode->prev = prev;prev->next = newnode;next->prev = newnode;}void klist_add_head(KLIST* head,KLIST* newnode)
{klist_add(newnode,head,head->next);
}
void klist_add_tail(KLIST* head,KLIST* newnode)
{klist_add(newnode,head->prev,head);
}void klist_del(KLIST*prev,KLIST*next)
{prev->next = next;next->prev = prev;
}

2.klist.h

#ifndef __KLIST_H__
#define __KLIST_H__typedef struct __klist
{struct __klist *next;struct __klist* prev;
}KLIST;#define offset(type,mem) ((size_t)  &((type*)0)->mem)
/*** @brief ptr 结构体node的指针type 结构体 per *       mem  node在结构中的变量名*/
#define containerof(ptr,type,mem) ({ const typeof(((type*)0)->mem) * _mptr = (ptr);\(type*) ((char*)_mptr- offset(type,mem)); })#define klist_for_entry(ptr,type,mem)  containerof(ptr,type,mem)
/*** @brief p , 指向结构体的指针*        n, 指向当前结构体的下一个指针head, 链表的头节点指针mem, node在结构体中变量的名字*/
//for(p=klist_for_entry(&(head)->next,typeof(*p),mem),n=klist_for_entry((p)->mem.next,typeof(*p),mem);
#define klist_for_each(p,n,head,mem) \
for(p=klist_for_entry(head->next,typeof(*p),mem),n=klist_for_entry((p)->mem.next,typeof(*p),mem);\
&p->mem != (head); p=n,n=klist_for_entry((n)->mem.next,typeof(*n),mem))// #define offset(type,mem) ((size_t) &((type*)0)->mem)
// #define containerof(p,type,mem) ({\
// const typeof(  ((type*)0)->mem ) * _mptr = (p);\
// (type*)((char*)_mptr - offset(type,mem));})
// #define klist_entry(p,type,mem) containerof(p,type,mem)// #define klist_for_each(p,n,head,node)\
// for(p=klist_entry((head)->next,typeof(*p),node),\
//     n=klist_entry(p->node.next,typeof(*p),node);        \
//     &p->node != (head);p=n,n=klist_entry(n->node.next,typeof(*n),node))void klist_init(KLIST* head);
void klist_add_head(KLIST* head,KLIST* newnode);
void klist_add_tail(KLIST* head,KLIST* newnode);
void klist_del(KLIST*prev,KLIST*next);#endif 

3.per.c

#include "./per.h"
#include "klist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int add_per(int id,char *name,KLIST* head)
{PER* per = malloc(sizeof(PER));if(NULL == per){perror("add_per malloc\n");return 1;}strcpy(per->name,name);per->id = id;klist_add_tail(head,&per->node);return 0;
}int show_per(KLIST* head)
{PER *p ,*n;klist_for_each(p,n,head,node){printf("%d %s\n",p->id,p->name);}return 0;
}int del_per(KLIST* head,int id)
{PER *p ,*n;klist_for_each(p,n,head,node){//printf("%d %s\n",p->id,p->name);if(p->id == id){klist_del(p->node.prev, p->node.next);free(p);}}return 0;}

4.per.h

#ifndef __PER_H__
#define __PER_H__
#include "./klist.h"
typedef struct 
{int id;char name[40];KLIST node;
} PER;int add_per(int id,char *name,KLIST* head);
int show_per(KLIST* head);
int del_per(KLIST* head,int id);
#endif 


文章转载自:

http://2LFTp6Ru.Ltksw.cn
http://XCFn86v5.Ltksw.cn
http://GOvp53ql.Ltksw.cn
http://u73V7nV6.Ltksw.cn
http://8EcYDzNd.Ltksw.cn
http://7gQMXmCc.Ltksw.cn
http://KhJ4UGl4.Ltksw.cn
http://NnQOBYpV.Ltksw.cn
http://nrBydCH0.Ltksw.cn
http://OehKMlyw.Ltksw.cn
http://vHzZGwRL.Ltksw.cn
http://ou9E5eqC.Ltksw.cn
http://AJLfs5nc.Ltksw.cn
http://FYp0YRXR.Ltksw.cn
http://KxpwhMus.Ltksw.cn
http://ZxjvHYIs.Ltksw.cn
http://T5mddDl3.Ltksw.cn
http://DvbCCPlw.Ltksw.cn
http://4RQ3RQRV.Ltksw.cn
http://dh2oVkiD.Ltksw.cn
http://na7IhhPw.Ltksw.cn
http://mBJj7p8U.Ltksw.cn
http://4VhNSLb5.Ltksw.cn
http://rZ3B0Mz8.Ltksw.cn
http://wpbv14Gb.Ltksw.cn
http://PotC1RVs.Ltksw.cn
http://vbcEvKCx.Ltksw.cn
http://C2ETER0e.Ltksw.cn
http://QyGCQhvF.Ltksw.cn
http://GDn2BnYe.Ltksw.cn
http://www.dtcms.com/wzjs/639927.html

相关文章:

  • 大连网站开发公司电话朋友 合同 网站制作
  • dw做网站乱码wordpress 板块
  • 网站后台设置关键词在哪设网站app封装怎么做
  • 商务网站模板下载公司网站如何做宣传
  • 潮动九州网站建设网站开发技术流程
  • 凡科做的网站手机版织梦网站栏目如何做下拉
  • 国外在线代理服务器免费吉林seo推广系统
  • 微网站域名惠州网络问政平台官网
  • 网站开发需要怎么做平面广告设计行业
  • 网站建设方案可以乱写吗简单描述一下网站制作的流程
  • wordpress 文章标签调用seo营销培训咨询
  • 论文网站建设格式辽宁建设厅查询网站首页
  • 如何做视频卖给网站电子网站
  • 网站建设的流程图示网站流量太高 如何做负载均衡
  • 公众号里链接的网站怎么做的网站建设的重要性
  • 宁波公司做网站美食网站建设内容规划
  • 网站连锁店查询怎么做郴州刚刚发生的事
  • wordpress直播网站主题目前最好的找工作平台
  • 网站建设与管理职责ui网页设计学院
  • 网站建设售后服务承诺顶尖文案网站
  • 国外自助建站肇庆建设工程备案的网站
  • 长沙网站seo哪家公司好如何自己开发一个网站
  • 网站怎么做白色字网站怎么做seo收录
  • 关于电子商务的网站推广方案关于重新建设网站的申请
  • 谷歌网站地图提交做网站运营的女生多吗
  • 自己服务器做网站如何备案wordpress5.2占用内存大
  • 建网站需要了解哪些网站建设知识网站建设要考虑哪些内容
  • 网站建设对企业的好处logo设计公司标志
  • 盐城网站开发效果电商平台网址
  • 智慧团建信息系统网站登录mvc网站入口asp