我在做一個基本的linked-list
程序。現在我在main方法的下面有這個代碼來檢查列表操作是否有預期的結果。在插入和刪除列表中的元素後,檢查結果列表是否與預期列表相同
例如,當我在列表的開頭插入元素是{50, 70, 80, 100, 77, 200, 44, 70, 6, 0}
。我期望這些元素列表{0, 6, 70, 44, 200, 77, 100, 80, 70, 50}
,然後我插入中間的元素是{5, 20, 10, 30, 7, 8, 2, 104, 1, 22}
,元素「200」後,我期望列表爲{0, 6, 70, 44, 200, 22, 1, 104, 2, 8, 7, 30, 10, 20, 5, 77, 100, 80, 70, 50}
。當我在列表的末尾插入一個元素並進行刪除操作時,我也希望這樣做。
因此,我想在操作結果和預期結果相同時顯示消息「正確」,如果其不同,則顯示「不正確」。但我沒有成功做到這一點。你能幫助理解這可以實現嗎?
這是我的代碼,我有評論是什麼,我想實現我對於第一種情況的目標(插入的開始):
int main()
{
int i=0;
int listsize=10;
int arrBegining[] = {50, 70, 80, 100, 77, 200, 44, 70, 6, 0};
int arrBeginingExpected[] = {0, 6, 70, 44, 200, 77, 100, 80, 70, 50};
int arrMiddle[] = {5, 20, 10, 30, 7, 8, 2, 104, 1, 22};
int arrMiddleExpected[] = {0, 6, 70, 44, 200, 22, 1, 104, 2, 8, 7, 30, 10, 20, 5, 77, 100, 80, 70, 50};
int arrEnd[] = {40, 30, 20, 1, 7, 76, 4 , 0, 80, 2};
int arrEndExpected[] = {0, 6, 70, 44, 200, 22, 1, 104, 2, 8, 7, 30, 10, 20, 5, 77, 100, 80, 70, 50, 40, 30, 20, 1, 7, 76, 4, 0, 80, 2};
int arrDeleteSpecificExpected[] = {0, 6, 70, 44, 200, 22, 1, 104, 2, 8, 7, 30, 10, 20, 5, 77, 100, 80, 70, 50, 40, 30, 20, 1, 7, 4 , 0, 80 ,2};
int arrDeleteFromEndExpected[] = {0, 6, 70, 44, 200, 22, 1, 104, 2, 8, 7, 30, 10, 20, 5, 77, 100, 80, 70, 50, 40, 30, 20, 1, 7, 4, 0};
// int newArr[] = {};
for(i=0;i<listsize;i++){
insert_at_begning(arrBegining[i]);
// newArr[i] = arrBegining[i];
}
// if(newArr == arrBegining){
// printf("Correct");
// }
// else{
// printf(Incorrect);
// }
for(i=0;i<listsize;i++){
insert_at_middle(arrMiddle[i], 200);
}
for(i=0;i<listsize;i++){
insert_at_end(arrEnd[i]);
}
for(i=0;i<listsize;i++){
delete_from_middle(76);
}
for(i=0;i<2;i++){
delete_from_end();
}
display_file(FILEDIR);
return 0;
}
Restant代碼,這個代碼工作,我只是在main方法的疑問:
void insert_at_begning(int value)
{
var=(struct node *)malloc(sizeof (struct node));
var->data=value;
if(head==NULL)
{
head=var;
head->next=NULL;
}
else
{
var->next=head;
head=var;
}
}
void insert_at_end(int value)
{
struct node *temp;
temp=head;
var=(struct node *)malloc(sizeof (struct node));
var->data=value;
if(head==NULL)
{
head=var;
head->next=NULL;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
var->next=NULL;
temp->next=var;
}
}
void insert_at_middle(int value, int loc)
{
struct node *var2,*temp;
var=(struct node *)malloc(sizeof (struct node));
var->data=value;
temp=head;
if(head==NULL)
{
head=var;
head->next=NULL;
}
else
{
while(temp->data!=loc)
{
temp=temp->next;
}
var2=temp->next;
temp->next=var;
var->next=var2;
}
}
int delete_from_middle(int value)
{
struct node *temp,*var;
temp=head;
while(temp!=NULL)
{
if(temp->data == value)
{
if(temp==head)
{
head=temp->next;
free(temp);
return 0;
}
else
{
var->next=temp->next;
free(temp);
return 0;
}
}
else
{
var=temp;
temp=temp->next;
}
}
printf("data deleted from list is %d",value);
}
int delete_from_end()
{
struct node *temp;
temp=head;
while(temp->next != NULL)
{
var=temp;
temp=temp->next;
}
if(temp ==head)
{
head=temp->next;
free(temp);
return 0;
}
printf("data deleted from list is %d",temp->data);
var->next=NULL;
free(temp);
return 0;
}
這是太長,所以我不寫比較,如果有用告訴我,所以我補充 – hmmftg
感謝您的回答真的很抱歉,我沒有把問題放在我已經擁有的代碼的其他部分,我已經有了插入和刪除操作,它只是在主要方法中,我不知道我怎麼能做到我想要的東西 – Jax
@Jax看起來你在你的程序中有一個鏈接列表,你想用你的插入來填充它,然後將它的結果與所需的整數數組進行比較。我是對嗎? – hmmftg