だから私は、キューヤーの代役として使用されている自作の二重リンクリストの実装を持っています。(私が確かに弱い言語であるCで実装されています)。
ノードの私のtypedef:
typedef struct Node
{
char *name;
int data;
int recurring;
struct Node *next;
struct Node *prev;
}node;
これは、「ノードには、名前、データポイント、繰り返しかどうかに関係なく、前のノードと次のノードへのポインタがあります」と書かれています。
そのような挿入機能
node * insertFromTail(node *tail, int data, int recurring, char *name)
{
node *newNode;
node *oldNext;
node *origTail = tail;
/*assume *pointer points to tail of list*/
/*printf("tail data is %d\n", tail->data);
printf("before loop\n");*/
while(tail->prev != NULL && tail->data > data)
{
/*printf("inside while loop\n");*/
tail = tail -> prev;
}
/*printf("after loop\n");*/
/*if we are looking at a no item list or tail*/
if(tail->next == NULL)
{
/*printf("pointer is tail\n");*/
return insert(tail, data, recurring, name);
}
else /*tail pointer points at item before the point of insertion*/
{
/*printf("default case\n");
printf("pointer data is %d\n", tail->data);*/
oldNext = tail->next;
newNode = (node *)malloc(sizeof(node));
newNode->data = data;
newNode->recurring = recurring;
newNode->name = name;
oldNext -> prev = newNode;
newNode -> next = oldNext;
tail -> next = newNode;
newNode -> prev = tail;
return origTail;
}
}
内部インサート付き
node * insert(node *tail, int data, int recurring, char *name)
{
/* Allocate memory for the new node and put data in it.*/
tail->next = (node *)malloc(sizeof(node));
(tail->next)->prev = tail;
tail = tail->next;
tail->data = data;
tail->recurring = recurring;
tail->name = name;
tail->next = NULL;
return tail;
}
リストの末尾、データポイント、次のアイテムが繰り返される時刻、およびアイテムの名前が渡されます。
空で、前の参照と次の参照がNULLのノード(ダミーノード)から開始し、stdInから入力を取得してinsertFromTailを呼び出すADDという関数を使用して3つの一意のノードを追加する場合
int main()
{
node *start,*temp,*tail;
start = (node *)malloc(sizeof(node));
temp = start = tail;
temp->next = NULL;
temp->prev = NULL;
if(strcmp(command, "ADD") == 0)
{
scanf("%d",&argTime);
scanf("%s",&argName);
tail = insertFromTail(head, argTime, 0, *argName);
}
}
そのように入力して:
INPUT:
ADD 10 Gin
ADD 20 Vodka
ADD 30 Rum
PRINT
私はの出力を取得します
OUTPUT:
Rum 10
Rum 20
Rum 30
目的の出力はOUTPUT:Gin 10 Vodka 20 Rum 30であるため、これはエラーです。
文字列がノードに渡される方法に関係しているように感じますが、ご覧のとおり、私は困惑しています。これが課題に残された最後のことであり、他のすべてが完全に機能しているので、誰かが私を正しい道に導くことができるかどうかを確認するためにここに尋ねることにしました。事前にご協力いただきありがとうございます:)
PS悪いことすべてを申し訳ありませんが、私は睡眠不足です:(