【发布时间】:2020-07-06 06:54:42
【问题描述】:
我有两个这样定义的双端队列
struct elem
{
int key; elem* next;
}
*left = NULL, *right=NULL, *left2 = NULL, *right2 = NULL;
以及推送和弹出功能
void push_front(int n, elem*&l, elem*&r)
{
elem *p=left;
left = new elem;
left -> key=n;
left -> next=p;
if(right==NULL)
{
right = left;
}
}
int pop_front(int &n, elem*&l, elem*&r)
{
elem *p;
if (left)
{
n=left->key;
p=left;
left=left->next;
if (left==NULL)
right=NULL;
delete p;
return 1;
}
else
return 0;
}
我必须输入搜索功能将使用的整数。出于某种原因,他们要求我首先弹出元素,检查它是否等于输入的数字并重复,直到我们找到元素或者我们是否从第一个双端队列中弹出了所有元素。在要求之前我已经这样做了,但显然它不正确:
void search(int x)
{
elem *y=left;
while(y->key!=x)
{
if(y==right)
{
cout<<x<<" wasn't found, adding to front."<<endl;
push_front(x);
return;
}
y=y->next;
}
cout<<x<<" was found"<<endl;
return;
}
感谢任何帮助。 而且不,我不能使用 deque 库或 std::find 或类似的东西。
【问题讨论】:
-
std::find - 你为什么不呢?
-
这是我不使用它的要求...我很久以前使用 std::find 做过这个,但实际上我不允许使用它。
-
我有两个这样定义的双端队列 -- 你向我们展示的更像是一个单链表,而不是双端队列。