**
【数据结构】栈的实现(C语言)
**
顺序栈的存储结构
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100
typedef struct
{
int *base;
int *top;
int length;
int stacksize;//栈可用的最大容量
}SqStack,*LSqStack;
顺序栈的初始化
【算法步骤】
1.为顺序栈动态分配一个最大容量为MAXSIZE的数组空间,使base指向这段空间的基地址,即栈底。
2.栈顶指针top初始为base,表示栈为空。
3.stacksize置为栈的最大容量MAXSIZE。
void initstack(LSqStack L)
{
L->base = (int *)malloc(maxsize*sizeof(int));
if(!L->base)
{
printf("error\n");
}
L->top = L->base;//top初始为base
L->stacksize = maxsize;//设置最大容量为maxsize
L->length = 0;
}
入栈
【算法步骤】
1.判断栈是否满,若满则返回ERROR。
2.将新元素压入栈顶,栈顶指针加1。
void push(LSqStack L,int e) //入栈
{
if(L->top-L->base == L->stacksize)
{
printf("error\n");
}
*(L->top)++=e;//将元素e压入栈顶,栈顶指针加一
L->length++;
}
出栈
【算法步骤】
1.判断栈是否空,若空则返回ERROR。
2.栈顶指针减1,栈顶元素出栈。
void pop(LSqStack L)//出栈
{
if(L->top == L->base)
{
printf("error\n");
}
int e = 0;
e = *L->top;
L->top--;
L->length--;
}
判断栈是否为空
只需判断top指针是否等于base指针
void isempty(LSqStack L)//判断是否为空
{
if(L->top == L->base)
{
printf("stack is empty\n");
}
}
打印栈
void print(LSqStack L)//输出显示栈
{
int e;
for(int i=L->length-1;i>=0;i--)
{
printf("%d ",L->base[i]);
}
}
主函数
int main()
{
SqStack l;
initstack(&l);
print(&l);
int j,e;
printf("please input the number of intrgers to be pushed in stack:");
scanf("%d",&j);
for(int i=0;i<j;i++)
{
printf("please input the %d integer:",i+1);
scanf("%d",&e);
push(&l,e);
}
printf("after input some element instack:\n");
printf("currently totally %d intergers\n",j);
print(&l);printf("\n");
printf("after delete 2 element from stack:\n");
pop(&l);pop(&l);
print(&l);
destroy(&l);
return 0;
}
利用栈进行数制转换
从键盘输入一个10进制数,借助于栈的特性将其转换成对应的8进制数输出显示。模八进栈。
void transfer(LSqStack L)//10进制转为8进制
{
printf("please input the number you want to transfer:");
int i;
scanf("%d",&i);
while(i!=0)
{
push(L,i%8);
i = i/8;
}
}