#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
#define LL long long
#define M(a,b) memset(a,b,sizeof(a))
typedef struct
{
int *base;///栈底
int *top;///栈顶
int stacksize;
} Sqstack;
int Initsatck( Sqstack &S) ///建立空栈
{
S.base = (int *)malloc(100*sizeof(int)); ///申请空间
if(!S.base)///申请空间失败
{
return -1;
}
S.top = S.base;
S.stacksize = 100;///栈的初始大小为100
return 1;
}
int Destroystack(Sqstack &S)///销毁栈
{
S.top = NULL;
S.stacksize = 0;
free(S.base);
return 1;
}
int clearstack(Sqstack &S)///请空栈
{
S.top=S.base;
return 1;
}
int Stackempty(Sqstack &S)///判断栈是否为空
{
if(S.top == S.base)
{
return -1;
}
else
{
return 1;
}
}
int Stacklen(Sqstack &S)///获得栈的长度
{
if(S.top == S.base)
{
return 0;
}
else
{
return (S.top - S.base);
}
}
int Gettop(Sqstack &S)///获得栈顶元素
{
int e;
if(S.top ==S.base)
{
return -1;
}
else
{
e=*(S.top-1);
}
return e;
}
int Push(Sqstack &S,int &e)///元素e入栈
{
if(S.top - S.base >=100)///空间不足
{
S.base = (int*)realloc(S.base,(S.stacksize + 10)*sizeof(int));
if(!S.base)
{
return -1;
}
S.top = S.base +100;
S.stacksize +=10;
}
*S.top = e;///如栈操作
S.top++;
return 1;
}
int Pop(Sqstack &S, int &e)///栈顶元素出栈,并用e返回其值
{
if(S.top == S.base)
{
return -1;
}
else
{
S.top--;
e=*S.top;
return e;
}
}
int Stacktraverse(Sqstack &S)///遍历输出该栈元素
{
if(S.base == NULL)
{
return -1;
}
int *p;
p = S.base;
while(p<S.top)
{
printf("%d ",*p);
p++;
}
printf("\n");
return 1;
}
int main()
{
int n;
int num[1005];
int num2[1005];
Sqstack S;
Initsatck(S);
if(Stackempty(S))
{
printf("此栈为空\n\n\n");
}
printf("请输入栈中的元素个数\n");
while(~scanf("%d",&n))
{
printf("请输入栈内元素:\n");
for(int i=0; i<n; i++)
{
scanf("%d",&num[i]);
Push(S,num[i]);
}
int del,e2;
printf("请输入想插入的元素的值以及位置\n");
scanf("%d %d",&del,&e2);
for(int i=0; i<n-del+1; i++)
{
num2[i]=Pop(S,num2[i]);
}
Push(S,e2);
Stacktraverse(S);
for(int i=n-del; i>=0; i--)
{
Push(S,num2[i]);
}
printf("插入后栈内的元素为\n");
Stacktraverse(S);
printf("请输入删除元素的位置:\n");
int del2;
scanf("%d",del2);
M(num2,0);
for(int i=0; i<n-del+2; i++)
{
num2[i]=Pop(S,num2[i]);
}
printf("所删除的元素是:");
printf("%d\n",num2[n-del-1]);
for(int i=n-del; i>=0; i--)
{
Push(S,num2[i]);
}
printf("删除该元素后栈里元素为:\n");
Stacktraverse(S);
}
return 0;
}
运行图 :