题目
给定一个e,删除顺序栈中的所有e(e可能有多个),不改变次序
代码
#include<stdio.h>
#define Max 10
typedef struct {
int data[Max];
int length;
}sqstack;
void Initstack(sqstack &sq)
{
sq.length =-1;
}
void CreatStack(sqstack &sq)
{
int n;
printf("请输入需要输入元素个数n:");
scanf("%d",&n);
if(n>Max){
printf("个数超出范围,请重新输入");
scanf("%d",&n);
}
int i;
for(i=0;i<n;i++){
sq.length++;
scanf("%d",&sq.data[i]);
}
}
int DisStack(sqstack sq)
{
if(sq.length < 0) return 0;
while(sq.length >= 0){
printf("%d ",sq.data[sq.length]);
sq.length--;
}
return 1;
}
int DeleteStack(sqstack &sq,int e)
{
sqstack p;
p.length =-1;
if(sq.length < 0) return 1;
int i;
while(sq.length > 0){
if(sq.data[sq.length-1 ] == e){
sq.length--;
}else{
p.length ++;
p.data[p.length ]=sq.data[sq.length-1 ];
sq.length--;
}
}
while(p.length > 0){
sq.length++;
sq.data[sq.length ]=p.data[p.length-1 ];
p.length--;
}
return 1;
}
int main()
{
int e;
printf("请输入需要删除的元素:");
scanf("%d",&e);
sqstack sq;
sq.length =0;
CreatStack(sq);
DeleteStack(sq,e);
DisStack(sq);
return 0;
}