1.main.c
//
// main.c
// 8_LinkStack
//
// Created by ls on 2022/5/19.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "LinkStack.h"
int main() {
LStack mystack;
InitStack(&mystack);
int select=1;
ElemType value=0;
while(select)
{
printf("********************************************n");
printf("* [1] push_back [2] pop_back *n");
printf("* [3] show_Stack [4] isEmpty *n");
printf("* [5] get_top [6] length *n");
printf("* [7] clear [8] destroy *n");
printf("********************************************n");
printf("请选择:> ");
scanf("%d",&select);
if(0 == select)
break;
switch (select)
{
case 1:
printf("Please input a number(-1 end): ");
while(scanf("%d",&value),value!= -1)
{
push_back(&mystack,value);
}
show_Stack(&mystack);
break;
case 2:
pop_back(&mystack,&value);
show_Stack(&mystack);
break;
case 3:
show_Stack(&mystack);
break;
case 4:
printf("Empty: %ldn",isEmpty(mystack));
break;
case 5:
get_top(mystack);
break;
case 6:
printf("length: %ldn",length(mystack));
break;
case 7:
clear0(&mystack);
break;
case 8:
destroy(&mystack);
break;
default:
printf("输入错误!");
break;
}
}
//destroy(&mystack);
printf("Hello, World!n");
return 0;
}
- LinkStack.h
// // LinkStack.h // 8_LinkStack // // Created by ls on 2022/5/19. // Copyright © 2022 LSC001. All rights reserved. // #ifndef LinkStack_h #define LinkStack_h #include#include #include // 1 定义宏 #define ElemType int // 2 定义节点、单链表 typedef struct LSnode { ElemType data; struct LSnode *next; }LSnode,*PLSnode; typedef struct LStack { PLSnode T; int size; }LStack; // 3 函数声明 void InitStack(LStack *S); void push_back(LStack *S,ElemType num); // 1 void pop_back(LStack *S,ElemType *num); // 2 void show_Stack(LStack *S); // 3 void get_top(LStack S); // 4 long isEmpty(LStack S); // 5 long length(LStack S); // 6 void clear0(LStack *S); // 7 void destroy(LStack *S); // 8 #endif
- LinkStack.c
//
// LinkStack.c
// 8_LinkStack
//
// Created by ls on 2022/5/19.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "LinkStack.h"
void InitStack(LStack *S)
{
S->T = (PLSnode)malloc(sizeof(PLSnode));
assert(S->T != NULL);
S->T->next=NULL;
S->size=0;
}
PLSnode new_(ElemType num)
{
PLSnode p = (PLSnode)malloc(sizeof(PLSnode));
p->data = num;
return p;
}
void push_back(LStack *S,ElemType num) // 1
{
if(S->T == NULL) return;
if(0 == S->size)
{
S->T->data=num;
}
else{
PLSnode p = new_(num);
p->next = S->T;
S->T = p;
}
S->size++;
}
void pop_back(LStack *S,ElemType *num) // 2
{
if(S->T==NULL || 0 == S->size) return;
PLSnode p = S->T;
*num = S->T->data;
S->T = p->next;
S->size--;
}
void show_Stack(LStack *S) // 3
{
if(S->T==NULL || 0 == S->size) return;
PLSnode p = S->T;
int n = S->size;
while (n>0) {
printf("%d ",p->data);
p = p->next;
n--;
}
printf("n");
}
void get_top(LStack S) // 4
{
if(S.T==NULL || 0 == S.size) return;
printf("%dn",S.T->data);
}
long isEmpty(LStack S) // 5
{
if(S.size == 0)
return 1;
else
return 0;
}
long length(LStack S) // 6
{
return S.size;
}
void clear0(LStack *S) // 7
{
if(S->T==NULL || 0 == S->size) return;
while (S->size > 1) {
PLSnode p = S->T;
S->T = p->next;
free(p);
p=S->T;
S->size--;
}
S->size=0;
}
void destroy(LStack *S) // 8
{
clear0(S);
free(S->T);
S->T = NULL;
}



