-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinkstack.c
More file actions
79 lines (64 loc) · 1.64 KB
/
Copy pathlinkstack.c
File metadata and controls
79 lines (64 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// Created by Administrator on 2018/5/26.
//
#include <afxres.h>
#include <stdio.h>
#include "linkstack.h"
#include "linklist.h"
typedef struct _tag_LinkStackNode{
LinkListNode node;
void* item; //栈的业务节点
}TLinkStackNode;
LinkStack* LinkStack_Create(){
return LinkList_Create();
}
void LinkStack_Destroy(LinkStack* stack){
LinkStack_Clear(stack);
LinkList_Destory(stack);
}
void LinkStack_Clear(LinkStack* stack){
if(stack==NULL){
return;
}
while(LinkList_Length(stack)>0){
LinkStack_Pop(stack); //在这个函数中释放节点的内存
}
return;
}
//在线性表的头部插入元素
int LinkStack_Push(LinkStack* stack,void* item){
TLinkStackNode *tmp = NULL;
int ret = 0;
tmp = (TLinkStackNode*)malloc(sizeof(TLinkStackNode));
memset(tmp,0, sizeof(TLinkStackNode));
tmp->item = item;
LinkList_insert(stack,(LinkListNode*)tmp,0);
if(ret!=0){
printf("error %d\n",ret);
free(tmp);
}
return ret;
}
void* LinkStack_Pop(LinkStack* stack){
void *item = NULL; //栈的业务节点
TLinkStackNode *tmp = NULL;
tmp = (TLinkStackNode*)LinkList_Delete(stack,0);
if(tmp==NULL){
return NULL;
}
item = tmp->item;
free(tmp);//包装节点入栈的时候分配了内存,现在释放
return item;
}
void* LinkStack_Top(LinkStack* stack){
TLinkStackNode *tmp = NULL;
tmp = (TLinkStackNode*)LinkList_Get(stack,0);
if(tmp==NULL){
return NULL;
}
return tmp->item;
}
int LinkStack_Size(LinkStack* stack){
return LinkList_Length(stack);
}
int LinkStack_Capacity(LinkStack* stack){}