栈
1、说明:是限定仅在表尾进行插入或删除操作的线性表,表尾端称为栈顶,表头端称为栈底
2、特点:后进先出(last in first out)LIFO
3、动态栈的实现,栈顶的插入删除(push pop)栈的初始化,判空以及取栈顶元素(静态栈有可能补吧)
4、结构体定义(其实和单链表一样,有一个top指示就可以了)
typedef struct node
{
int data;
struct node *next;
}Stack;
5、初始化
void Init_S(Stack *top)
{
top->next = NULL;//栈为空
}
6、判空
int IsEmpty_S(Stack *top)
{
if(top->next == NULL)//就这个地方少写了一个等于号一直报段错误
{
return 1;
}
return 0;
}
7、将元素压入栈(其实就是头插入建造链表)
// 进栈,将元素element压入栈中
int Push(Stack *top,int element)//头插法
{
Stack *p;
p = (Stack*)malloc(sizeof(Stack));
if(!p)
{
return 0;
}
p->data = element;
p->next = top->next;
top->next = p;
return 1;
}
8、出栈
//出栈,保存弹出值
int Pop(Stack *top,int *element)
{
Stack *p;
if(IsEmpty_S(top))
{
return 0;
}
p = top->next;
*element = p->data;
top ->next = p->next;
free(p);
return 1;
}
9、主函数
int main()
{
int x;
Stack *top = (Stack*)malloc(sizeof(Stack));//栈顶,单链表的头结点
Init_S(top);//初始化
printf("please inputlength the some positive num:");
scanf("%d",&x);
while(x>0)
{
Push(top,x);
scanf("%d",&x);
}
Stack *p;
p = top->next;
while(p)
{
printf("%4d",p->data);
p = p->next;//栈顶到栈底输出
}
printf("\n");
while(Pop(top,&x))//一直出栈输出出栈元素
{
printf("%4d",x);
}
printf("\n");//出栈已经释放出了栈中的空间
free(top);
return 0;
}

浙公网安备 33010602011771号