#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;///栈的初始大小为100return 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;
}
运行图 :