数据结构 实验二
- 格式:doc
- 大小:86.00 KB
- 文档页数:7
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20
//typedef int Status;
typedef struct Stack{//顺序栈
int *base;
int *top;
int stacksize; //栈可使用的最大容量
} SqStack;
int InitStack (
SqStack &S){ //0栈的初始化
S.base=(int *)malloc (STACK_INIT_SIZE *sizeof(int));
if (! S.base) exit (-1);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;//栈的空间大小
return 1;
}
int Push(SqStack &S, int e){//1入栈
if (S.top - S.base>= S.stacksize){
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(-1);//如果分配失败,则退出
S.top=S.base+S.stacksize;//栈顶
S.stacksize+=STACKINCREMENT;//栈空间
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S){//2出栈
int e;
if(S.top==S.base)
printf("栈为空!");
//空栈
e=*--S.top;
return e;//返回栈顶元素
}
void Print(SqStack &S){//输出
if( S.top==S.base)
{
printf("栈为空\n");
return ;//空栈
}
while(S.top>S.base)
{
printf("%d ",*S.base);
S.base++;
}
printf("\n");
return ;
}
void tip()
{
printf("*********关于栈的操作*************\n");
printf("输入1创建空栈\n");
printf("输入2进栈\n");
printf("输入3出栈\n");
printf("输入4输出栈元素\n");
printf("输入#退出\n");
printf("**********************\n");
}
int main()
{
int x,n,i;
char k;
SqStack S;
//struct Stack S;
tip();
for(;k!=1;)
{printf("请输入选项:");
scanf("%d",&k);
if (k!=1)
printf("警告!请先创建一个栈\n");
}
while(scanf("%c",&k),k!='#')
{
switch(k)
{
case '1':InitStack(S);
printf("操作完毕\n创建成功!\n");
printf("请继续选择:");
break;
case '2':
printf("请选择进栈元数个数:");
scanf("%d",&n);
printf("请输入进栈元素:");
for(i=1;i<=n;i++)
{scanf("%d",&x);
Push(S, x);}
printf("操作完毕\n");
printf("请继续选择:");
break;
case '3':
{printf(" %d 出栈\n",Pop(S));}
printf("操作完毕\n");
printf("请继续选择:");
break;
case '4':
Print(S);
printf("操作完毕\n");
printf("请继续选择:");
break;
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct Node{
DataType elem;
struct Node *top;
}StackNode;
typedef StackNode*Stack;
void init_stack(Stack &s)
{
s=(Stack)malloc(sizeof(StackNode));
s->top=NULL;
printf("\n空栈申请成功!\n");
}
void push(Stack &s)
{ int elem;
Stack NewNode=(Stack)malloc(sizeof(StackNode));
printf("请输入需入栈元素:");
scanf("%d",&elem);
NewNode->elem=elem;
NewNode->top=s->top;
s->top=NewNode;
}
DataType pop(Stack &s)
{if((s->top)!=NULL) {
DataType t=(s->top)->elem;
Stack s1=(s->top)->top;
delete(s->top);
s->top=s1;
printf("元素%d出栈\n",t);
}
else printf("栈为空,无效操作!\n");
return 0;}
void menu()
{
printf("所有操作如下:\n");
printf("(1)采用链式存储实现入栈操作。
\n");
printf("(2)采用链式存储实现栈的出栈操作。
\n");
printf("(3)退出\n");
}
void main()
{
Stack s;int a;menu();
init_stack(s);printf("请选择:");
while(scanf("%d",&a),a!=3)
{
switch(a)
{
case 1:push(s);printf("请继续选择:");break;
case 2:pop(s);printf("请继续选择:");break;
case 3:exit(0);
}
}
}。