e1 1 e2 2 3 e3 e4 e5 e6 4 5 6 7
程序基路径:
路径 P1 P2 P3 P4 节点序列 1-2-4 1-2-5 1-3-6 1-3-7 描述 路径1 路径4 路径2 路径3 高度3、复杂度5 程序控制流图
1 e1 e2 2 e4 e3 e5 3 5 e6 e7 e8 4 6 7 8 9
程序基路径
路径 P1 P2 P3 P4
节点序列 1-2-4 1-2-5-6 1-2-5-7 1-3-8 12
描述 路径1 路径5 路径4 路径2 P5 1-3-9 路径3 高度3、复杂度6 程序控制流图
1 e1 e2 e3 2 e4 3 4 e6 e7 5 e8 e9 e10 6 7 8 9 10 11 程序基路径
路径 P1 P2 P3 P4 P5 P6 节点序列 1-2-4-6 1-2-4-7 1-2-5-8 1-2-5-9 1-3-10 1-3-11 描述 路径1 路径6 路径5 路径4 路径2 路径3 高度3、复杂度7 程序控制流图
e1 1 e2 e3 2 e4 e9 3 4 e5 e6 e7 5 e8 e11 10 e12 e10 6 7 8 9 12 13 11
13
程序基路径
路径 P1 P2 P3 P4 P5 P6 P7 节点序列 1-2-4-6 1-2-4-7 1-2-5-8 1-2-5-9 1-3-10-12 1-3-10-13 1-3-11 描述 路径1 路径6 路径5 路径4 路径7 路径2 路径3 4.2程序算法的实现
算法思路:
首先标记节点(即程序插桩),后构造链表保存程序的基路径,程序执行时读取保存的基路径,利用随机数生成程序生成随机数,利用随机数执行程序,执行过程中与保存好的基路径进行比较,与哪条基路径相同就在哪条基路径数值上加1,直至所有基路径数值均不为0,则停止程序,否则一直生成随机数执行程序。
1.弟弟不大,口气大 2、弟弟不硬,嘴巴硬
3、没钱、活不好,还把约炮挂嘴上 4、约会迟到3分钟,约会时间3分钟 5. 战场还没看到硝烟,炮弹已用完 帅哥们中枪了吗
解决问题来找我!徽=亻言msdf003 具体实现:
线性链表10:线性链表的链式存储结构的特点是用 一组任意的存储单元存储线性表的数学元素(这组存储单元可以是连续的,也可以是不连续的)。整个链表的存取必须从头指针开始进行,头指针指示链表中第一个结点的存储位置。用线性链表表示线性表时,数据元素之间的关系是由结点中的指针指示的,这种存储结构为非顺序映象或链式映象。单链表可以由头指针惟一确定,在C语言中可以用“结构指针”来描述。
10
引用严蔚敏编著的《数据结构》第28页
14
// 线性表的单链表存储结构
typedef struct LNode{
ElemType date; //数据域 struct LNode *next; //指针域 }LNode, LinkList;
单链表是非随机存取的存储结构。函数GetElem在单链表中的实现。 Status GetElem_L(LinkList L,int I,ElemType &e){
//L为带头结点的单链表头指针
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR p=L—>next; j=1;//初始化,P指向第一个结点,j为计数器
while(p&&jnext;++j; }
if(!p||j>i)return ERROR;//第i个元素不存在 e=p—>date;/取/第i个元素 return OK; }
此算法的基本操作是比较j和i并后移指针p,while循环体中的语句频度与被查元素在表中的位置有关。
函数的使用: freopen()
此函数是stdio.h中包涵的一个函数FILE *freopen(const char *filename,const char *type, FILE *stream);,它的功能是替换一个流,或者说重新分配文件指针,实现重定向。如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。此函数通常用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错。如果成功则返回该指向该stream的指针,否则为NULL。
FILE *freopen(const char *filename,const char *type, FILE *stream);//filename
15