动态分配顺序存储结构
#define ElemType char
typedef struct Sknode{
ElemType data;
struct Sknode *next;
}Sknode,*StackLink;
基本操作
初始化
void StackLink_Init(StackLink &S){
S=(StackLink)malloc(sizeof(Sknode));
S->next =NULL;
printf("初始化成功\n");
}
创建栈
void StackLink_Creat(StackLink &S){
Sknode *p=S;
printf("输入栈成员个数:");
int num=0;
scanf("%d",&num);
getchar();
while(num--){
Sknode *s=(Sknode *)malloc(sizeof(Sknode));
printf("请输入入栈成员:\n");
scanf("%c",&s->data);
getchar();
s->next=p->next;
p->next=s;
}
}
入栈
void StackLink_Push(StackLink &S,ElemType newval){
Sknode *p=S;
Sknode *s=(Sknode *)malloc(sizeof(Sknode));
s->data=newval;
s->next=p->next;
p->next=s;
printf("栈插入成功\n");
}
出栈
void StackLink_Pop(StackLink &S,ElemType &x){
if(!StackLink_Length(S)){
printf("栈删除失败\n");
exit(-1);
}
else{
Sknode *p=S->next;
S->next=p->next;
x=p->data;
free(p);
printf("栈删除成功\n");
}
}
读取栈顶元素
ElemType StackLink_GetTopval(StackLink S){
if(S->next==NULL){
printf("栈空,读取栈顶元素失败\n");
exit(-1);
}
else{
printf("读取栈顶元素成功\n");
return S->next->data;
}
}
求栈长度
int StackLink_Length(StackLink S){
int i=0;
Sknode *p=S;
while(p->next!=NULL){
i++;
p=p->next ;
}
return i;
}
判空
void StackLink_empty(StackLink S){
if(S->next){
printf("栈不为空\n");
}
else{
printf("栈为空\n");
}
}
打印栈
void StackSq_Print(StackSq S){
if(S.Top !=-1){
while(S.Top!=-1){
printf("%c ",S.Data[S.Top--]);
}
printf("打印成功\n");
}
else{
printf("打印失败\n");
}
}
代码实现结果
int main()
{
StackLink S;
StackLink_Init(S);
StackLink_Creat(S);
printf("栈的长度为:%d\n",StackLink_Length(S));
StackLink_Print(S);
ElemType a;
StackLink_Pop(S,a);
StackLink_Print(S);
printf("栈顶元素为:%d\n",StackLink_Length(S));
StackLink_Push(S,a);
StackLink_Print(S);
StackLink_empty(S);
}