所以我有一个自制的双链表实现,它被用作排队器的替代品。(用 C 语言实现,这是一种我公认的弱点)。
我的节点类型定义:
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 prev 和 next 引用(一个虚拟节点),我添加三个唯一节点和一个名为 ADD 的函数,该函数调用 insertFromTail 从 stdIn 获取输入
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对不起,一切都不好,我睡眠不足:(