C++程序设计实践指导1.13自然数集中找合数改写要求实现

改写要求1:用单链表实现

改写要求2:析构函数中依次将链表结点删除

#include <cstdlib>
#include <iostream>

using namespace std;
struct LinkNode
{
       int data;
       LinkNode* next;
};
class NOPRIME
{
      friend struct LinkNode;
      LinkNode* Head;
      int n;
      public:
            NOPRIME(int n1)
            {
               n=n1;
            }  
            void creat();
            int yes(int x)
            {
                for(int i=2;i<x/2;i++)
                   if(x%i==0)
                      return 1;
                return 0;
            }
            void Search();
            void print()
            {
                 LinkNode* p=Head->next;
                 while(p)
                 {
                         cout<<p->data<<'\t';
                         p=p->next;
                 }
                 cout<<endl;
            }
            ~NOPRIME()
            {
               LinkNode* p=Head;
               while(Head)
               {
                    p=Head;
                    Head=Head->next;
                    delete(p);
               }
            }
};

void NOPRIME::creat()
{
   Head=new LinkNode;
   Head->next=NULL;
   LinkNode* p=Head;
   int i=n;
   while(i)
   {
           LinkNode* newLinkNode=new LinkNode;
           newLinkNode->next=NULL;
           p->next=newLinkNode;
           p=newLinkNode;
           i--;
   }
}

void NOPRIME::Search()
{
     LinkNode* p;
     int i,j,t=1;
    for(i=3;;i++)
    {
       t=1;
       p=Head->next;
       for(j=i;j<i+n;j++)
        {
          p->data=j;
          p=p->next;
          if(yes(j)==0)
             t=0;
        }
    if(t==1)
       break;
    }
} 
int main(int argc, char *argv[])
{
    NOPRIME num(10);
    num.creat();
    num.Search();
    num.print();
    return EXIT_SUCCESS;
}

 

posted @ 2015-02-09 22:55  Dior12345  阅读(309)  评论(1编辑  收藏  举报