资讯详情

王道书P40 T16(单链表实现)

/**  * 用链表实现 王道P40 T16  *  * ①算法思想:  * 两个链表从头到尾逐一比较,  * 若 data 等等,一起后移,  * 若 data 不等,则 B 链表从头开始和谐 A 上次链表的位置继续比较。  *  * ②数据结构:  * typedef struct LNode{  *      int data;  *      struct LNode *next;  * }LNode,*LinkList;  *  * ③算法设计  */   #include <stdio.h> #include <iostream>  typedef struct LNode{     int data;     struct LNode *next; }LNode,*LinkList;  bool IsSubSet(LinkList A,LinkList B){     LinkList r = A -> next,q,p = r;     while(r){         q = B -> next;//q 每次从头开始比较         while(q && p && (q -> data == p -> data)){//保证 r 和 q 都不为空             p = p -> next;             q = q -> next;             }         if(q == NULL){//如果 q = NULL,说明 q 把 B 比较后,说明 B 是 A 的子序列             return true;         }         如果不是因为 q == NULL 结束死循环,说明 A B 还没有比较成功,         //那么 p 从下一个,q 从头开始,两者重新对比。         p = p -> next;     }     return false; }    以下是测试程序  尾插法建立单链表(有头节点) LinkList CreatLinkListR(){     LinkList L = (LinkList)malloc(sizeof(LNode));//创建头结点,头指针L指向头节点     LinkList p = L,q;     这里不必让 L -> next 指向空,因为L保存了头结点指针,尾插一定会在L后插入一个新节点,所以L后面肯定会有节点而不是空,     //p用于保存尾节点指针,因此应允许 p -> next 为空。     int data;     while(1){         scanf("%d",&data);         if(data == 99999)             break;         q = (LinkList)malloc(sizeof(LNode));         q -> data = data;         p -> next = q;         p = q;     }     p -> next = NULL;     return L; }  循环单链表的遍历(有头节点,无头结点) 引入带头结点 L -> next ,传入无头结点 L LinkList Order(LinkList L){     while(L){//当L不是空的时候         printf("%d ",L -> data);         L = L -> next;     }     printf("\n"); }   int main(){     LinkList A = CreatLinkListR();     LinkList B = CreatLinkListR();     Order(A -> next);     Order(B -> next);     printf("%d\n",IsSubSet(A,B)); }

标签: 圆形连接器插p40j9q

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司