#ifndef __STACKLINK_H__
#define __STACKLINK_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int datatype;
typedef struct node{
union{
int len;
datatype data;
};
struct node*next;
}Stacklink;
void Output(Stacklink*top);
Stacklink* Create();
void Insert(Stacklink*top,datatype value);
int Pop(Stacklink*top);
#endif
#include"Stacklink.c"
int main(int argc, const char *argv[])
{
Stacklink*L=Create();
if(L==NULL){
printf("栈创建失败\n");
return -1;
}
while(1){
char ch[10];
datatype value;
printf("\n输入入栈的元素:");
scanf("%d",&value);
Insert(L,value);
printf("还需要继续y/n?");
scanf("%s",ch);
if(strcmp(ch,"n")==0){
break;
}
}
printf("\n从栈底到栈顶:");
Output(L);
while(1){
char ch[10];
if(Pop(L)==-1){
break;
}
printf("\n还需要继续y/n?");
scanf("%s",ch);
if(strcmp(ch,"n")==0){
break;
}
}
printf("\n从栈底到栈顶:");
Output(L);
return 0;
}
#include"Stacklink.h"
Stacklink* Create()
{
Stacklink*top=(Stacklink*)malloc(sizeof(Stacklink));
if(top==NULL){
printf("创建栈失败\n");
return NULL;
}
top->len=0;
top->next=NULL;
return top;
}
void Insert(Stacklink*top,datatype value)
{
Stacklink*p=(Stacklink*)malloc(sizeof(Stacklink));
if(p==NULL){
printf("创建新节点失败\n");
return;
}
p->data=value;
p->next=NULL;
printf("%d已入栈\n",p->data);
Stacklink*q=top;
while(q->next){
q=q->next;
}
q->next=p;
top->len++;
}
void Output(Stacklink*top)
{
while(top->next!=NULL){
top=top->next;
printf("%d\t",top->data);
}
}
int Pop(Stacklink*top)
{
if(top->len==0){
printf("空栈\n");
return -1;
}
Stacklink*p=top;
while(p->next->next){
p=p->next;
}
Stacklink*q=p->next;
printf("\n%d已出栈",q->data);
p->next=NULL;
free(q);
q=NULL;
top->len--;
return 0;
}