一、栈的基本概念及特点
栈(stack):只允许在一段插入的线性表;
基本特点:后进先出 进栈顺序-出栈顺序 常作为考研易考点
二、代码展示
1.satck的基本构成(链式结构-带头节点)
typedef struct Linknode{
int data;
struct Linknode* next;
}Linknode,* Listack;
2.栈的初始化建立
Listack Head_insert(Listack& l) {
int x;
Linknode* s;
l = (Listack)malloc(sizeof(Linknode));
l->next = NULL;
while (1) {
cin >> x;
char c;
cin.get(c);
if (c == '\n') break;
s = (Linknode*)malloc(sizeof(Linknode));
s->data = x;
s->next = l->next;
l->next = s;
}
return l;
}
3.栈的插入(只能插在头结点之后)
Listack insert_stack(Listack& l,int x) {
Linknode* s;
s = (Linknode*)malloc(sizeof(Linknode));
s->data = x;
s->next = l->next;
l->next = s;
return l;
}
4.栈的删除
int delete_stack(Listack& l) {
Linknode* p;
int x;
p = l->next;
x = p->data;
l->next = p->next;
free(p);
return x;
}
5.完整代码展示
#include <iostream>
using namespace std;
typedef struct Linknode{
int data;
struct Linknode* next;
}Linknode,* Listack;
Listack Head_insert(Listack& l) {
int x;
Linknode* s;
l = (Listack)malloc(sizeof(Linknode));
l->next = NULL;
while (1) {
cin >> x;
char c;
cin.get(c);
if (c == '\n') break;
s = (Linknode*)malloc(sizeof(Linknode));
s->data = x;
s->next = l->next;
l->next = s;
}
return l;
}
Listack insert_stack(Listack& l,int x) {
Linknode* s;
s = (Linknode*)malloc(sizeof(Linknode));
s->data = x;
s->next = l->next;
l->next = s;
return l;
}
int delete_stack(Listack& l) {
Linknode* p;
int x;
p = l->next;
x = p->data;
l->next = p->next;
free(p);
return x;
}
int gettop(Listack& l) {
int x;
x= (l->next)->data;
return x;
}
void print(Listack l) {
Linknode* p = l->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << "\n";
}
int main() {
Listack l;
cout << "请创建一个队列(以回车结束)";
Head_insert(l);
print(l);
cout << "栈顶元素为:" << gettop(l) << endl;
cout << "插入元素为:";
int x;
cin >> x;
insert_stack(l, x);
print(l);
delete_stack(l);
print(l);
return 0;
}