【发布时间】:2018-01-14 02:42:57
【问题描述】:
我必须使用带有数组和索引的链表上的函数来运行程序,该函数将列表的最小元素写入指针指向的变量上。 我还必须使用此功能,如下所示:
void minimum(struct list* ptr, unsigned int * varPtr){
unsigned int min, position;
for(position=ptr->buffer[ptr->first].next,
min=ptr->buffer[ptr->first].value;
position != ptr->size;
position=ptr->buffer[position].next) {
if (min > ptr->buffer[position].value);
min=ptr->buffer[position].value;
printf("%d\n",min);
}
*varPtr = min;
}
不幸的是,每次我运行代码时,最后一个 printf 总是返回的不是最小值,而是列表中的最后一个元素,无论它比其他元素小还是大。 我很确定初始化和插入功能可以正常工作,但找不到错误。 谢谢你的帮助。
这是程序:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
/*
* defining my list
*/
struct record {
int value;
int next;
};
struct list {
int first;
int free;
int size;
struct record* buffer;
};
void init(struct list* ptr, int dimensione){
ptr->buffer = (struct record *) malloc(dimensione*sizeof(struct record));
ptr->size = dimensione;
ptr->first = ptr -> size; //valore illegale
/*
* order I want
* 1 -> 3 -> 0 -> 4 -> 2
*/
ptr->free = 1;
ptr->buffer[0].next = 3;
ptr->buffer[1].next = 0;
ptr->buffer[2].next = 4;
ptr->buffer[3].next = 2;
ptr->buffer[4].next = ptr->size;
}
/*
* bottom inserting
*/
bool insert( struct list* ptr, int value ){
int moved;
int * position_ptr;
if(ptr->free != ptr->size){
moved = ptr -> free;
ptr->free = ((ptr->buffer)[ptr->free]).next;
position_ptr = &ptr->first;
while(*position_ptr != ptr->size){
position_ptr = &(((ptr->buffer)[*position_ptr]).next);
}
*position_ptr = moved;
ptr->buffer[moved].value = value;
ptr->buffer[moved].next = ptr -> size;
return true;
}
else{
return false;
}
}
/*
* I MUST use EXACTLY this function
*/
void minimum(struct list* ptr, unsigned int * varPtr){
unsigned int min, position;
for(position=ptr->buffer[ptr->first].next,
min=ptr->buffer[ptr->first].value;
position != ptr->size;
position=ptr->buffer[position].next) {
if (min > ptr->buffer[position].value);
min=ptr->buffer[position].value;
printf("%d\n",min);
}
*varPtr = min;
}
void visit (struct list * ptr){
int position;
position = ptr->first;
while(position!=ptr->size){
printf("%d\n", ptr->buffer[position].value);
position=ptr->buffer[position].next;
}
}
int main(void){
struct list mylist;
init(&mylist, 5);
insert(&mylist, 10);
insert(&mylist, 20);
insert(&mylist, 50);
insert(&mylist, 35);
int min_element;
minimum(&mylist,&min_element);
visit(&mylist);
printf("min value: %d\n", min_element);
fflush(stdout);
return EXIT_SUCCESS;
}
【问题讨论】:
标签: c function arraylist linked-list