企业网站建设怎么样,长沙企业建,wordpress ishome,国外网站怎么建设1.栈的定义 栈是仅限在表尾进行插入和删除的线性表#xff0c;栈又被称为后进先出的线性表 1.1栈顶和栈底 栈是一个线性表#xff0c;我们允许插入和删除的一端称为栈顶 栈底和栈顶相对#xff0c;实际上栈底的元素不需要关心
1.2入栈和出栈 栈元素的插入操作叫做入栈…1.栈的定义 栈是仅限在表尾进行插入和删除的线性表栈又被称为后进先出的线性表 1.1栈顶和栈底 栈是一个线性表我们允许插入和删除的一端称为栈顶 栈底和栈顶相对实际上栈底的元素不需要关心
1.2入栈和出栈 栈元素的插入操作叫做入栈也可称为进栈、压栈
2.栈的特点 栈也是一种线性结构栈只能从一端添加元素也只能从这一端取出元素向栈中添加元素的过程称为入栈从栈中取出元素的过程称为出栈 3.栈的链表实现 利用链表来模拟栈每个栈元素可以用一个链表结点表示data代表数据域next代表指针域
typedef struct StackNode
{int data;StackNode* next;
}StackNode; stack表示栈其中head指向栈顶size代表栈中元素个数
typedef struct Stack
{StackNode* head;int size;
}Stack;
3.1入栈和出栈 栈元素的插入操作叫做入栈新建一个值为1的结点并且将它指向栈顶将它标记为新的栈顶 void StackPushStack(Stack* stk, int dt)
{StackNode* vtx (StackNode*)malloc(sizeof(StackNode));//首先生成一个栈元素结点vtx-next stk-head;//将它的后继指向当前得到栈顶vtx-data dt;//数据域为dtstk-head vtx;//将vtx作为新的栈顶stk-size;//对栈中元素计数加一
} 栈元素的删除操作叫做出栈也可称为弹栈 void StackPopStack(Stack* stk)
{StackNode* temp stk-head;//将当前的栈顶元素存储在temp中stk-head temp-next;//将新的栈顶指向栈顶的后继free(temp);//释放temp的内存--stk-size;//对栈中元素计数减一
}
3.2栈的遍历 想要输出栈内存储的所有元素就要使用遍历
void StackPrintStack(Stack* stk)
{while (stk-head ! NULL){printf(%d , stk-head-data);stk-head stk-head-next;stk-size--;}
}
3.3完整实现代码
#includestdio.h
#includestdlib.h
typedef struct StackNode
{int data;StackNode* next;
}StackNode;
typedef struct Stack
{StackNode* head;int size;}Stack;
void StackPushStack(Stack* stk, int dt)
{StackNode* vtx (StackNode*)malloc(sizeof(StackNode));//首先生成一个栈元素结点vtx-next stk-head;//将它的后继指向当前得到栈顶vtx-data dt;//数据域为dtstk-head vtx;//将vtx作为新的栈顶stk-size;//对栈中元素计数加一
}
void StackPopStack(Stack* stk)
{StackNode* temp stk-head;stk-head temp-next;free(temp);--stk-size;
}
void StackPrintStack(Stack* stk)
{while (stk-head ! NULL){printf(%d , stk-head-data);stk-head stk-head-next;stk-size--;}
}
int main()
{Stack* stk (Stack*)malloc(sizeof(Stack));stk-head NULL;stk-size 0;int x0;scanf_s(%d, x);while (x){StackPushStack(stk,x);scanf_s(%d, x);}StackPrintStack(stk);return 0;
} 运行结果 4栈的数组实现 这里用到了C没学过的可以先只看链表实现
4.1入栈和出栈 数组模拟栈时用top表示栈顶所在的索引。初始化top-1表示没有元素
const int N 100010;
int stack[N];
int top -1;
void StackPushStack(int stack[],int x)
{stack[top]x;
} 出栈时使用pop函数top向前移动一格top--。
void StackPopStack(int stack[])
{top--;
}4.2获取栈顶的值
stack[top]; 4.3判断栈是否为空 如果top0则表示不为空
if(top0)
{}
4.4完整代码实现
#includeiostream
using namespace std;
const int N 100010;
int stack[N];
int top -1;
int main()
{int n;cin n;while (n--){int x;cin x;stack[top] x;}for (int i top-1;i0; i--){cout stack[i] ;}cout endl;top--;for (int i top - 1; i 0; i--){cout stack[i] ;}cout endl;cout stack[top] endl;if (top 0){cout 栈不为空 endl;}
}