数据结构实验——栈(附程序)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("\n");
return 0;
}//返回栈顶元素e
void PrintStack(SqStack &S)
{
int *k;
printf("顺序栈中的元素:\n");
for(k=S.base;k!=S.top;k++)
printf("%5d",*k);
printf("\n");
}//遍历顺序栈
}SNode,*Stack;
typedef struct
{
Stack top;
int length;
}SqStack;//定义链式栈的结构体
int InitStack(SqStack &S)
{
S.top=NULL;
S.length=0;
return 0;
}//初始化链式栈
int Push(SqStack &S,int e)
else
{
Stack q;
q=S.top;
S.top=S.top->next;
--S.length;
free(q);
}
return 0;
}//删除栈顶元素e
int GetTop(SqStack &S)
{
if(!S.top)return 0;
else
{
printf("返回栈顶元素%5d\n",S.top->data);
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
}
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
}
printf("结束运行。再见!\n");
}
链式栈
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode{
int data;
struct SNode *next;
printf("\n");printf("\n");
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
while(n!=0)
{
switch(n)
{
case 1:printf("插入栈顶元素");scanf("%d",&e);Push(S,e);PrintStack(S);printf("\n");printf("\n");break;
if(!S.base)exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 0;
}//插入元素e
int Pop(SqStack &S,int e)
{
if(S.top==S.base)return 0;
e=*--S.top;
printf("删除的栈顶元素%5d",e);
printf("\n");
return 0;
}//删除栈顶元素e
int Gettop(SqStack &S,int e)
{
if(S.top==S.base)return 0;
e=*(S.top-1);
printf("返回的栈顶元素%5d",e);
实验二栈
一、实验目的
1.了解栈的特性。
2.掌握栈的顺序表示和实现。
3.掌握栈的链式表示和实现。
二、实验内容
实验2.1栈的顺序表示和实现
编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化顺序栈。
(2)插入元素。
(3)删除栈顶元素。
(4)取栈顶元素。
(5)遍历顺序栈。
{
Stack p;
p=(Stack)malloc(sizeof(SNode));
if(!p)exit(0);
p->data=e;
p->next=S.top;
S.top=p;
S.length++;
return 0;
}//插入元素e
int Pop(SqStack &S)
{
if(!S.top)return 0;
if(!S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 0;
}//初始化顺序栈
int Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
}
return 0;
}//返回栈顶元素
int PrintStack(SqStack &S)
{
Stack p;
printf("链式队列中的元素");
p=S.top;
if(S.top!=NULL)
{
while(p!=源自文库ULL)
{
printf("%5d",p->data);
p=p->next;
void ClearStack(SqStack &S)
{
S.top=S.base;
}//置空顺序栈
void main()
{
int e,i,n;
SqStack S;
InitStack(S);
printf("1—插入顶元素;2—删除顶元素;3—返回顶元素;4—置空顺序栈;0—结束运行\n");
printf("\n");printf("\n");printf("\n");
case 2:Pop(S,e);PrintStack(S);printf("\n");printf("\n");break;
case 3:Gettop(S,e);printf("\n");printf("\n");break;
case 4:printf("已置空顺序栈");ClearStack(S);printf("\n");printf("\n");break;
(6)置空顺序栈。
实验2. 2栈的链式表示和实现
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化链栈。
(2)链栈置空。
(3)入栈。
(4)出栈。
(5)取栈顶元素。
(6)遍历链栈。
顺序栈
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
return 0;
}//返回栈顶元素e
void PrintStack(SqStack &S)
{
int *k;
printf("顺序栈中的元素:\n");
for(k=S.base;k!=S.top;k++)
printf("%5d",*k);
printf("\n");
}//遍历顺序栈
}SNode,*Stack;
typedef struct
{
Stack top;
int length;
}SqStack;//定义链式栈的结构体
int InitStack(SqStack &S)
{
S.top=NULL;
S.length=0;
return 0;
}//初始化链式栈
int Push(SqStack &S,int e)
else
{
Stack q;
q=S.top;
S.top=S.top->next;
--S.length;
free(q);
}
return 0;
}//删除栈顶元素e
int GetTop(SqStack &S)
{
if(!S.top)return 0;
else
{
printf("返回栈顶元素%5d\n",S.top->data);
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
}
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
}
printf("结束运行。再见!\n");
}
链式栈
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode{
int data;
struct SNode *next;
printf("\n");printf("\n");
printf("选择: ");
scanf("%d",&n);
printf("\n");printf("\n");
while(n!=0)
{
switch(n)
{
case 1:printf("插入栈顶元素");scanf("%d",&e);Push(S,e);PrintStack(S);printf("\n");printf("\n");break;
if(!S.base)exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 0;
}//插入元素e
int Pop(SqStack &S,int e)
{
if(S.top==S.base)return 0;
e=*--S.top;
printf("删除的栈顶元素%5d",e);
printf("\n");
return 0;
}//删除栈顶元素e
int Gettop(SqStack &S,int e)
{
if(S.top==S.base)return 0;
e=*(S.top-1);
printf("返回的栈顶元素%5d",e);
实验二栈
一、实验目的
1.了解栈的特性。
2.掌握栈的顺序表示和实现。
3.掌握栈的链式表示和实现。
二、实验内容
实验2.1栈的顺序表示和实现
编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化顺序栈。
(2)插入元素。
(3)删除栈顶元素。
(4)取栈顶元素。
(5)遍历顺序栈。
{
Stack p;
p=(Stack)malloc(sizeof(SNode));
if(!p)exit(0);
p->data=e;
p->next=S.top;
S.top=p;
S.length++;
return 0;
}//插入元素e
int Pop(SqStack &S)
{
if(!S.top)return 0;
if(!S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 0;
}//初始化顺序栈
int Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
}
return 0;
}//返回栈顶元素
int PrintStack(SqStack &S)
{
Stack p;
printf("链式队列中的元素");
p=S.top;
if(S.top!=NULL)
{
while(p!=源自文库ULL)
{
printf("%5d",p->data);
p=p->next;
void ClearStack(SqStack &S)
{
S.top=S.base;
}//置空顺序栈
void main()
{
int e,i,n;
SqStack S;
InitStack(S);
printf("1—插入顶元素;2—删除顶元素;3—返回顶元素;4—置空顺序栈;0—结束运行\n");
printf("\n");printf("\n");printf("\n");
case 2:Pop(S,e);PrintStack(S);printf("\n");printf("\n");break;
case 3:Gettop(S,e);printf("\n");printf("\n");break;
case 4:printf("已置空顺序栈");ClearStack(S);printf("\n");printf("\n");break;
(6)置空顺序栈。
实验2. 2栈的链式表示和实现
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)初始化链栈。
(2)链栈置空。
(3)入栈。
(4)出栈。
(5)取栈顶元素。
(6)遍历链栈。
顺序栈
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100