我们先来抄书
所有函数,都是抄书,反正考试的时候也要复习,现在提前啃啃哦
第零步
链栈的 增 , 删 , 改 ,查 ,判空等
typedef struct Snode{
int data;
struct Snode *next;
}Snode , *LinkStack;
//初始化
bool InitStack(LinkStack &s){
s = NULL;
return true;
}
//判断是否为空
bool Empty(LinkStack s){
if(s == NULL) return true;
return false;
}
//入栈
bool Push(LinkStack &s , int e){
LinkStack p = new Snode;
p -> data = e;
p -> next = s;
s = p;
return true;
}
//出栈
bool Pop(LinkStack &s , int &e){
if(Empty(s)) return false;
e = s->data;
LinkStack p = s;
s = s->next;
delete p;
return true;
}
//取栈顶元素
int GetTop(LinkStack s){
if(Empty(s)) return false;
return s->data;
}
表达式求值里已经写过了,一模一样,就不赘述
第一步
定义队列
typedef struct{
int *base;
int front;
int rear;
}SqQueue;第二步
判断队空
bool QEmpty(SqQueue q){
if(q.front == q.rear) return true;
return false ;
}第三步
队列的初始化
//队列的初始化
int InitQueue(SqQueue &q){
q.base = new int(Maxsize);
if(!q.base) exit(OVERFLOW);
q.front = q.rear = 0;
return true;
}第四步
判断队满
//判断队满
bool Full(SqQueue q){
if((q.rear +1) % Maxsize == q.front) return true;
return false;
}第五步
入队
bool Enqueue(SqQueue &q , int e){
if(Full(q)) return false;
else{
q.base[q.rear] = e;
q.rear = (q.rear +1 )% Maxsize;
return true;
}
}第六步
出队
bool Dequeue(SqQueue &q , int &e){
if(QEmpty(q)) return false;
e = q.base[q.front];
q.front = (q.front + 1) % Maxsize;
return true;
}第七步
取队首元素
int GetHead(SqQueue q){
if(QEmpty(q)) return false;
return q.base[q.front];
}开始写
第八步
思路,就先把栈的元素,放到队列里,然后准备一个中间栈,当队列中的元素和删除的元素值不相等时,就把元素,放进中间栈中,放完后,在从中间栈,按顺序再放到原栈里
main函数
int main()
{
SqQueue q; //定义和初始化(栈还有队列的)
InitQueue(q);
LinkStack s , s1;
InitStack(s);
InitStack(s1);
int n; //原来栈的元素个数
cout<<"请输入栈元素个数"<<"\n";
cin >> n;
int t;
cout<< "请输入栈元素" <<"\n";
for(int i = 0 ;i < n;i++){
cin >> t; //输入,栈中原来的元素,并放入栈中
Push(s, t);
}
while(!Empty(s)){ // 当s不为空时,将s中的元素,一个个放进队列中
int t1;
Pop(s, t1);
Enqueue(q, t1);
}
cout<<"请输入要删除的特定值"<<"\n";
int t3; //要删除的特定值
cin >> t3;
while(!QEmpty(q)){ //当队列不为空的时候
if(GetHead(q) != t3){ //当队头元素,和要删除的元素不相等的时候,把它放入中间栈中
Push(s1, GetHead(q));
}
int e;
Dequeue(q, e); //一个个出栈的同时,放入,中间栈
}
while(!Empty(s1)){ // 当中间栈不为空的时候,将中间栈的元素,放回原栈
Push(s, GetTop(s1));
int c;
Pop(s1, c);
}
s1 = s;
while(s1){
cout << s1->data <<" "; // 输出原栈s中的元素
s1 = s1 ->next;
}
cout << "\n";
}

京公网安备 11010502036488号