# 链栈基本操作

http://blog.csdn.net/jwentao01/article/details/46765517###;

//只能在一段进行插入和删除，因此不存在，在中间进行插入

#include <iostream>

using namespace std;

typedef struct node{
int data;
struct node *next;
}Node;

typedef struct stack{
Node *top;            /**书本写法是：加一个bottom，个人感觉没什么用，反而加一个count用于表示节点数会更好*/
int count;
}Link_Stack;

/**创建一个空栈*/
Link_Stack * Creat_stack()
{
Link_Stack *p;
p = new Link_Stack;   /**这一步不要忘！需要给p创建空间*/
p->count = 0;
p->top = NULL;

return p;
}

/**入栈操作：push*/
Link_Stack * Push_stack(Link_Stack *p,int elem)
{
if(NULL == p)
return NULL;

Node *temp;
temp = new Node;
temp->data = elem;

temp->next = p->top;   /**注意这里和队列的入队操作不同，next指向不同，为了方便出栈操作*/
p->top = temp;

p->count += 1;

return p;
}

/**出栈操作：pop*/
Link_Stack * Pop_stack(Link_Stack *p)
{
Node *temp;
temp = p->top;
if(NULL == p->top)
{
cout << "The stack is empty." << endl;
return p;
}
else{
p->top = p->top->next;    /** temp = temp->next;  千万不能这么写，看看下一步是什么？*/
delete temp;

p->count -= 1;

return p;
}
}

/**栈的遍历：输出栈*/
int Show_stack(Link_Stack *p)
{
Node *temp;
temp = p->top;

if(NULL == p->top)
{
cout << "The stack is empty." << endl;
return 0;
}
while(NULL != temp)
{
cout << temp->data << ' ';
temp = temp->next;
}
cout << endl;

return 0;
}

int main()
{
int i = 5;
int elem;
Link_Stack *p;
p = Creat_stack();
while(i--)
{
cin >> elem;
Push_stack(p,elem);
}
cout << "空栈插入5个元素后:" << endl;
Show_stack(p);

cout << "删除3个元素后:" << endl;
for(i = 3;i--;)
{
Pop_stack(p);
}
Show_stack(p);
cout << "count:" << p->count << endl;

cout << "删除2个元素后:" << endl;
for(i = 2;i--;)
{
Pop_stack(p);
}
Show_stack(p);
cout << "count:" << p->count << endl;

Push_stack(p,6);
cout << "插入元素6后:" << endl;
Show_stack(p);
cout << "count:" << p->count << endl;

return 0;
}
• 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
• 79
• 80
• 81
• 82
• 83
• 84
• 85
• 86
• 87
• 88
• 89
• 90
• 91
• 92
• 93
• 94
• 95
• 96
• 97
• 98
• 99
• 100
• 101
• 102
• 103
• 104
• 105
• 106
• 107
• 108
• 109
• 110
• 111
• 112
• 113
• 114
• 115
• 116
• 117
• 118
• 119
• 120
• 121

/点滴积累，我的一小步O(∩_∩)O~/

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客