<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 集合交差并三種操作的C實(shí)現(xiàn)

          集合交差并三種操作的C實(shí)現(xiàn)

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏

          /*********************************************
          集合的差集操作
          參數(shù): 兩個(gè)集合的指針
          返回值: 新的集合指針
          *********************************************/
          Set * XorSets(const Set *s1, const Set *s2)
          {
          Set *newset = NULL;
          Node_t *head = NULL;

          assert(s1 != NULL && s2 != NULL);

          if(s1->head == NULL)
          {
          /*空集合*/
          creat_nullset(&newset);
          return newset;
          }
          if(s2->head == NULL)
          {
          copySet(&newset,s1);
          return newset;
          }

          /*newset和s1是相同的*/
          copySet(&newset,s1);
          head = s1->head;

          while(head != NULL)
          {
          /*如果s2中存在當(dāng)前元素,刪除*/
          if(findElement(s2, head->value))
          {
          delete_setElement(&newset,head->value);
          }
          head = head->next;
          }

          return newset;
          }

          集合打印操作、集合的刪除操作

          /*********************************************
          打印集合
          參數(shù): 集合指針
          返回: void
          **********************************************/
          void print_set(const Set *s)
          {
          Node_t * head = NULL;
          int i = 0;
          assert(s);
          head = s->head;

          printf("{ ");

          while(head != NULL)
          {
          ++i;
          printf("%d ",head->value);

          if(i % 5 == 0 && i != 0)
          {
          i = 0;
          // printf("");
          }
          head = head->next;
          }
          printf("}");
          }

          /*********************************************
          刪除一個(gè)集合
          參數(shù): 指向集合指針的指針
          返回值: void
          **********************************************/
          void delete_set(Set **s)
          {
          Node_t *head = NULL;
          Node_t *temp = NULL;

          // assert(*s);
          if(*s == NULL)
          return;

          head = (*s)->head;

          while(head != NULL)
          {
          temp = head;
          head = head->next;
          free(temp);
          (*s)->size --;

          temp = NULL;
          }
          free(*s);
          *s = NULL;
          }

          最后是我的測(cè)試程序:

          /************************************************
          主函數(shù)
          完成各個(gè)函數(shù)的測(cè)試工作
          最后需要完成內(nèi)存的釋放
          ************************************************/
          int main()
          {
          Set* sets1 = NULL;
          Set* sets2 = NULL;
          Set* sets3 = NULL;
          Set* sets4 = NULL;

          int i = 0;
          int j = 0;
          for(i = 0; i < 10; ++ i)
          {
          if(!create_set(&sets1, i+10))
          break;
          j = i + 10 - 5;

          if(!create_set(&sets2, j))
          break;
          }
          printf("Set1 : ");
          print_set(sets1);
          printf("Set2 : ");
          print_set(sets2);

          sets3 = OrSets(sets1,sets2);
          printf("Set1 + Set2: ");
          print_set(sets3);

          sets3 = OrSets(sets2,sets1);
          printf("Set2 + Set1: ");
          print_set(sets3);

          delete_set(&sets3);
          sets3 = AndSets(sets1,sets2);
          printf("Set1 * Set2: ");
          print_set(sets3);

          delete_set(&sets3);
          sets3 = AndSets(sets2,sets1);
          printf("Set2 * Set1: ");
          print_set(sets3);

          delete_set(&sets3);
          sets3 = XorSets(sets1,sets2);
          printf("Set1 - Set2: ");
          print_set(sets3);

          delete_set(&sets3);
          // creat_nullset(&sets4);
          sets3 = XorSets(sets2,sets1);
          printf("Set2 - Set1: ");
          print_set(sets3);

          delete_set(&sets1);
          delete_set(&sets2);
          delete_set(&sets3);
          delete_set(&sets4);
          return 0;
          }

          實(shí)驗(yàn)效果:

          總結(jié):

          該實(shí)現(xiàn)并沒(méi)有考慮性能方面,基本上實(shí)現(xiàn)了集合的簡(jiǎn)單操作。后面有時(shí)間再想想如何優(yōu)化查找和刪除操作。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();