我有大学的家庭作业,我必须使用不是来自std / stl库的deque。我从我的大学指南中复制了他们卖给我的代码,但是当我测试它时,我得到了读访问违规错误。这是代码:
#include <iostream>
using namespace std;
struct deque
{
int key;
deque *next_element;
} *LEFT = NULL, *RIGHT = NULL;
void push_LEFT(int x);
void push_RIGHT(int x);
int pop_LEFT(int &x);
int pop_RIGHT(int &x);
int main()
{
int temp;
push_LEFT(1);
push_LEFT(2);
push_LEFT(3);
push_LEFT(4);
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
system("pause");
}
void push_LEFT(int x)
{
deque *ex;
ex = LEFT;
LEFT = new deque;
LEFT->key = x;
if (RIGHT == NULL)
{
RIGHT = LEFT;
}
}
void push_RIGHT(int x)
{
deque *ex;
ex = RIGHT;
RIGHT = new deque;
RIGHT->key = x;
if (LEFT == NULL)
{
LEFT = RIGHT;
}
else
{
ex->next_element = RIGHT;
}
}
int pop_LEFT(int &x)
{
deque *ex;
if (LEFT)
{
x = LEFT->key;
ex = LEFT;
LEFT = LEFT->next_element;
if (LEFT == NULL)
{
RIGHT = NULL;
}
delete ex;
return 1;
}
else
{
return 0;
}
}
int pop_RIGHT(int &x)
{
deque *ex;
if (RIGHT)
{
x = RIGHT->key;
if (LEFT == RIGHT)
{
delete RIGHT;
LEFT = RIGHT = NULL;
}
else
{
ex = LEFT;
while (ex->next_element != RIGHT)
{
ex = ex->next_element;
}
x = RIGHT->key;
ex->next_element = NULL;
delete RIGHT;
RIGHT = ex;
}
return 1;
}
else
{
return 0;
}
}
我认为push函数有效,问题出在pop函数中,因为抛出了异常。提前谢谢!
答案 0 :(得分:1)
我认为你的书中的例子是完全错误的,并且通过微小的修正它是不正确的,因此我为你写了一个新的代码。我认为你正在寻找一个使用push和pop方法的简单队列。我只在你的代码中写了一个方向队列或左一个,如果你愿意,你可以向右扩展一个。
#include <iostream>
using namespace std;
struct deque
{
int key;
deque *next_element=NULL;
} *LEFT = NULL;
void push_LEFT(int x);
void pop_LEFT(int &x);
int main()
{
int temp;
push_LEFT(1);
push_LEFT(2);
push_LEFT(3);
push_LEFT(4);
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
pop_LEFT(temp);
cout << temp << endl;
system("pause");
}
void push_LEFT(int x)
{
if (LEFT== NULL)
{
LEFT = new deque;
LEFT->key = x;
LEFT->next_element = NULL;
}
else
{
deque* ext=LEFT;
while (ext->next_element!=NULL)
{
ext = ext->next_element;
}
ext->next_element = new deque;
ext->next_element->key = x;
}
}
void pop_LEFT(int &x)
{
if (LEFT)
{
x = LEFT->key;
delete Left;
LEFT = LEFT->next_element;
}
}