0
我試圖添加一些鏈接列表到我的遞歸質數編碼,我能夠存儲使用鏈接列表的值,然後當我要檢索兩個素數之間的質數輸入的數字我得到了這個結果。素數使用鏈接列表和遞歸在渦輪c
輸入端1和5:
1, 21, 301, 5
輸出應爲:
2,3,5
的代碼是:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
struct node
{
//struct node *prev;
int num;
struct node *nxt;
}*head;
void store(int value){
struct node *var, *temp;
var = (struct node *)malloc(sizeof(struct node));
var->num = value;
if(head==NULL){
head = var;
head->nxt = NULL;
}else{
temp = var;
temp->nxt = head;
head=temp;
}
}
void accept(int value, int i){
if(i<2){
printf("Enter value: ");
scanf("%d", &value);
store(value);
i++;
accept(value,i);
}
}
void prime(){
int num,x,y;
struct node *temp,*temp2,*var;
temp = head;
temp2 = temp->nxt;
y = temp->num;
x = temp2->num;
primeloop(x,y);
}
int primeloop(int x,int y){
int num;
if (x == 1) x++;
if(x <= y){
num = isPrime(x,2); // second input parameter added
printf("%d",num);
if(num == 0){
printf("");
}else{
printf("%5d",x);
}
primeloop(x+1,y);
}
}
int isPrime(int n, int i){
if(n%i==0 && n!=2 && n!=i){
return(0);
} else {
if (i < sqrt(n)) {
return(isPrime(n,i+1));
} else
return(1);
}
}
void main(){
int i,value;
clrscr();
i = 0;
accept(value,i);
prime();
getch();
}
我不得不改變一些行來使它和鏈表一起工作,因爲算法仍然是一樣的,所以我可能會在這裏丟失一些東西。請指出我做錯了什麼。
側面說明:'head'沒有得到很好的初始化。更好的是...... head = NULL。注意; NULL並不總是0. – chux
@chux會記住這一點,謝謝 – magicianiam