使用(void*)在C中列出



任务:使用以下头文件在C(C++)中创建列表:

#include <stdio.h>
#include <stdlib.h>
const unsigned int N = 100;
const short ListOk = 0;
const short ListNotMem = 1;
const short ListEmpty = 2;
const short ListFull = 3;
typedef void * base;
typedef struct element * ptrel;
typedef struct element {
    base data;
    ptrel next;
} element;
typedef struct{
    ptrel Start;
    ptrel ptr;
    unsigned int N;
} List;
static short ListError;
void InitList(List *L);
void PutList(List *L, base E);
void GetList(List *L, base *E);
void ReadList(List *L, base *E);
int EmptyList(List *L);
int FullList(List *L);
unsigned int Count(List *L);
void BeginPtr(List *L);
void EndPtr(List *L);
void MovePtr(List *L);
void MoveTo(List *L, unsigned int n);
void ClearList(List *L);
void CopyList(List *L1, List *L2);

所以,这是我已经写的:

#include "list.h"
void InitList(List *L) {
    L->Start = (ptrel)malloc(sizeof(element));
    if (L->Start == NULL) {
        ListError = ListNotMem;
        return;
    } 
    L->ptr = L->Start;
    L->ptr->next = NULL;
    ListError = ListOk;
}
void PutList(List *L, base E) {
    ptrel tmp = (ptrel)malloc(sizeof(element));
    if (tmp == NULL) {
        ListError = ListNotMem;
        return;
    } 
    if (Count(L) == L->N) {
        ListError = ListFull;
        free(tmp);
        return;
    }
    tmp->data = E;
    tmp->next = L->ptr->next;
    L->ptr->next = tmp;
    L->ptr = L->ptr->next;
}
void GetList(List *L, base *E) {
    if (L->Start == NULL) {
        ListError = ListEmpty;
        return;
    }
    *E = L->ptr->next->data;
    L->ptr->next = L->ptr->next->next;
}

现在我有一些问题:

  1. 如何在主程序中使用PutList?第二个参数是什么?例如,若我想把5放在列表中,我应该使用额外的变量吗?像这样:x = 5; PutList(&l, (base)x)。对吧
  2. 如何使用GetList?再说一遍,第二个参数是什么?(base)&x还是什么
  1. 您是对的,在PutList中,第二个参数应该是指向您要放入的数据的指针。因此,在您的示例中,如果要保存的数据是一个数字,则需要指向它。但请注意,您的实现似乎没有保留内存,因此您必须自己执行。

  2. GetList的第二个参数是指向结果的指针的指针。当您调用GetList时,它尚未设置。GetList会为您设置。

示例:

int x = 8;
List l;
PutList(l, &x);  // put a pointer to x into the list
int *y;          // y isn't set yet.
GetList(l, &y);  // now, y points to x
printf("x is %d. y points to %d.n", x, *y);

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新