相对于顺序存储,链式存储可以将分散的空间集中在一起,栈的特点就是先进后出,后进先出。
废话不多说直接上代码解释:
定义结构体:
typedef struct stackNode
{
int data;
struct stackNode *Next;
}stackNode;
typedef struct
{
stackNode *top;//栈顶指针
int count;
}LinkStack;
第一个结构体里面定义数据域和指针域,第一个结构体定义了一个栈顶指针。count来计数
链表初始化
//初始化
void Initstack(LinkStack *S)
{
S->top = (stackNode*)malloc(sizeof(stackNode));
S->top = NULL;
S->count = 0;
}
增加结点:把新创建的结点的指针域指向栈顶指针,然后把新结点赋值给栈顶指针。
void addstack(LinkStack *S,int number)
{
stackNode *s = (stackNode*)malloc(sizeof(stackNode));
s->data = number;
s->Next = S->top;
S->top = s;
S->count++;
}
删除结点:将栈顶指针赋值给一个指针,然后后移一位,最后释放掉刚才的指针。
void delectstack(LinkStack *S)
{
if(S->count == 0)
{
return ;
}
if(S)
{
stackNode *p = S->top;
S->top = S->top->Next;
S->count--;
free(p);
}
}
打印结点
void print(LinkStack S)
{
stackNode *p = S.top;
while(p)
{
printf("%d ",p->data);
p = p->Next;
}
}
完整代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
typedef struct stackNode
{
int data;
struct stackNode *Next;
}stackNode;
typedef struct
{
stackNode *top;//栈顶指针
int count;
}LinkStack;
//初始化
void Initstack(LinkStack *S)
{
S->top = (stackNode*)malloc(sizeof(stackNode));
S->top = NULL;
S->count = 0;
}
void addstack(LinkStack *S,int number)
{
stackNode *s = (stackNode*)malloc(sizeof(stackNode));
s->data = number;
s->Next = S->top;
S->top = s;
S->count++;
}
void delectstack(LinkStack *S)
{
if(S->count == 0)
{
return ;
}
if(S)
{
stackNode *p = S->top;
S->top = S->top->Next;
S->count--;
free(p);
}
}
void all_delect(LinkStack *S)
{
stackNode *p;
while(p)
{
p = S->top;
S->top = S->top->Next;
free(p);
}
}
void print(LinkStack S)
{
stackNode *p = S.top;
while(p)
{
printf("%d ",p->data);
p = p->Next;
}
}
int main()
{
LinkStack s;
Initstack(&s);
addstack(&s,1);
addstack(&s,2);
addstack(&s,3);
addstack(&s,4);
delectstack(&s);
all_delect(&s);
print(s);
}