当前位置:首页 » 存储配置 » 顺序栈实现数据的栈存储代码

顺序栈实现数据的栈存储代码

发布时间: 2022-06-24 23:43:17

㈠ 顺序栈用data[1..n]存储数据,栈顶指针是top,则值为x的元素入栈的操作的代码 是:

必须选A。
入栈操作,是先将top加1,然后push元素;
出栈操作,是先取出元素,然后top减1

㈡ 数据结构c语言实现采用顺序存储实现队列的初始化、入栈、出栈操作

顺序栈的实现
#include <stdio.h>
#include "iostream.h"
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S)
{
S->base==(int *)malloc(STACK_INT_SIZE *sizeof(int));
if(!S->base) exit(-2);
S->top=S->base;
S->stacksize=STACK_INT_SIZE;
return 1;
}
int GetTop(SqStack S,int *e)
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack *S,int e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+STACKINCREMENT) *sizeof(int));
if(!S->base) exit(-2);
S->top=S->base+S->stacksize;
}
*S->top++=e;
return 1;
}
int Pop(SqStack *S,int e)
{
if(S->top==S->base) return 0;
e=*--S->top;
return 1;
}
main()
{
int a,b,c;
int *p1,*p2,*p3;
p1=&a;p2=&b;p3=&c;
SqStack *S;
printf("Initialize the stack.\n");
InitStack(S);
Push(S,p1);
Push(S,p2);
Push(S,p3);
GetTop(S,p3);
Pop(S,p3);
}

㈢ 50分急求数据结构链栈与顺序栈的基本操作代码

//Sorry,看来我理解错了,这是改后的》》》》》》》》
//顺序栈>>>>>>>>>>>>>>>
#include<stdio.h>
#include<stdlib.h>
#define
MAXSIZE
100
typedef
struct
{
int
data[MAXSIZE];
int
top;
}SqStack;
void
PushStack(SqStack
*S,int
x)
//入栈
{
if(S->top==MAXSIZE-1)
printf("栈已满,不能入栈!\n");
else
{S->data[++S->top]=x;printf("入栈已完成!\n");}
}
void
PopStack(SqStack
*S)
//退栈
{
if(S->top==-1)
printf("栈为空,不能出栈!\n");
else
{S->top--;printf("退栈已完成!\n");}
}
int
GetStackTop(SqStack
S)
//取栈顶元素
{
return
S.data[S.top];
}
main()
{
int
x,i;
SqStack
myStack;
myStack.top=-1;
do
{
printf("请选择你需要的操作:\n1.置空栈.\n2.进栈.\n3.退栈.\n4.取栈顶元素.\n5.退出程序.\n(请输入1或2或3或4或5):");
scanf("%d",&i);
switch(i)
{
case
1:myStack.top=-1;printf("栈已置空!\n");break;
case
2:printf("请输入你要进栈的元素:");

scanf("%d",&x);

PushStack(&myStack,x);break;
case
3:PopStack(&myStack);break;
case
4:if(myStack.top!=-1)
printf("栈顶元素是
%d.\n",GetStackTop(myStack));

else
printf("栈为空,没有元素!\n");break;
case
5:break;
default:printf("选择错误,请重新输入!\n");break;
}
}while(i!=5);
return
0;
}
//链栈>>>>>>>>>>>>
#include<stdio.h>
#include<stdlib.h>
typedef
struct
SNode
{
int
data;
struct
SNode
*next;
}SNode,*LinkStack;
LinkStack
top;
LinkStack
PushStack(LinkStack
top,int
x)
//入栈
{
LinkStack
s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return
top;
}
LinkStack
PopStack(LinkStack
top)
//退栈
{
LinkStack
p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退栈已完成\n");
return
top;
}
else
printf("栈是空的,无法退栈!\n");
return
0;
}
int
GetStackTop(LinkStack
top)
//取栈顶元素
{

return
top->data;
}
main()
{
int
i,x;
do
{
printf("请选择你需要的操作:\n1.置空栈.\n2.进栈.\n3.退栈.\n4.取栈顶元素.\n5.退出程序.\n(请输入1或2或3或4或5):");
scanf("%d",&i);
switch(i)
{
case
1:top=NULL;break;
case
2:printf("请输入你要进栈的元素:");

scanf("%d",&x);

top=PushStack(top,x);

printf("进栈已完成!\n");break;
case
3:top=PopStack(top);break;
case
4:if(top!=NULL)
printf("栈顶元素是:%d!\n",GetStackTop(top));

else
printf("栈是空的,没有元素!\n");break;
case
5:break;
default:printf("选择错误,请重新输入!\n");break;
}
}while(i!=5);
return
0;
}

㈣ 数据结构。编写主函数实现顺序栈的基础操作(建栈、入栈、出栈、销毁栈、取栈顶元素、显示栈、清除栈,)

#include "stdio.h" #include "stdlib.h" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct Stack{ int*base; int*top; int size; }Stack; void init(Stack*S) { S->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); S->top=S->base; S->size=STACK_INIT_SIZE; } Stack pushstack(Stack S,int e) { if (S.top-S.base==S.size) {S.base=(int*)realloc(S.base,(S.size+STACKINCREMENT)*sizeof(int)); if(!S.base) {printf("存储分配失败!"); exit(1); } S.top=S.base+S.size; S.size+=STACKINCREMENT; } *S.top++=e; return S; } Stack popstack(Stack S) { if(S.top==S.base)exit(1); --S.top; return S; } int main() { int i; Stack S; init(&S); scanf("%d",&i); S=pushstack(S,i); printf("%d\n",*(S.top-1)); S=popstack(S); if(S.top==S.base) printf("栈为空"); system("pause"); return 0; }

㈤ 编写主函数实现顺序栈的基础操作

栈有两种存储结构,因此表示与实现也是二种形式。 1)顺序栈是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。 表示: ┌──┐ 由于画图太不方便,现描述如下:图代表的是一维数组,下面为栈底,也是下 top→ │ │ 标最小的值,上面top为栈顶,而不一定是数组的最大的下标。 ├──┤ base → │ │ └──┘ 主函数:是指实现调用栈实现建立、插入、删除等操作的main()吗?你需要的是循环菜单的方式还是顺序的一一实现的方式?没有说明无法给准确的答案。 2)链式栈利用单链表的实现其对栈的各种操作 表示:┌──┬──┐ ┌──┬──┐ ┌──┬──┐ top→ │ │ ─┼→ │ │ ─┼→ ......→│ │ ∧ │ └──┴──┘ └──┴──┘ └──┴──┘ 链表中每个结点都有data和next二个域。

㈥ 建立顺序存储的栈,并对之进行入栈、出栈、取栈顶元素操作的c语言算法

#include "process.h"
#include "stdio.h"
#include "assert.h"

const int stackIncreament=20; //栈溢出时扩展空间的增量

class SeqStack
{
private:
int top; //栈顶指针
int MAX; //栈的最大可容纳个数
int *elements; //存放栈中元素的栈数组
void overflowProcess(); //栈的溢出处理
public:
SeqStack(int sz=50); //构造函数
~SeqStack() { delete[]elements; } //析构函数
bool pop1(int & x); //元素出栈
void push1(const int & x); //新元素进栈
bool IsEmpty1()const; //判断栈空与否
bool IsFull1()const; //判断栈满与否
void output1(); //输出元素进栈顺序
void output(int x); //输出x

};

SeqStack::SeqStack(int sz):top(-1),MAX(sz)
{
elements=new int[MAX]; //创建栈的数组空间
assert(elements!=NULL); //断言:动态存储分配成功与否
}

bool SeqStack::pop1(int & x) //栈顶元素出栈
{
if(IsEmpty1()==true) return false;//判栈空否,若栈空则函数返回
x=elements[top--]; //栈顶指针退1
return true; //退栈成功
}

void SeqStack::push1(const int & x) //新元素进栈
{
if(IsFull1()==true) overflowProcess(); //栈满则溢出处理
elements[++top]=x; //栈顶指针先加1,再进栈
}

bool SeqStack::IsEmpty1() const //判断栈空与否
{
return (top==-1)?true:false;
}

bool SeqStack::IsFull1()const //判断栈满与否
{
return (top==MAX-1)?true:false;
}

void SeqStack::overflowProcess() //栈的溢出处理
{
//私有函数,扩充栈的存储空间。
int *Array=new int[MAX+stackIncreament]; //和课本不一样 ??????????
if(Array==NULL)
{
printf("存贮分配失败 ! \n");
exit(1);
}
for(int i=0;i<=top;i++) Array[i]=elements[i];
MAX=MAX+stackIncreament;
delete []elements;
//elements=Array;
}

void SeqStack::output1() //元素入栈顺序输出
{
int n=0;
int t=top;
for(int i=0;i<top;i++)
{
printf(" %d",elements[i]);
n++;
if(n%10==0)
printf("\n");
}
}

void SeqStack::output(int x) //栈内元素输出
{
printf(" %d",x);
}

//----------------------顺序栈函数--------------------------//
void SeqStack1( SeqStack A)
{
int x=-1;
int X;
printf("请输入要入栈A的元素值,以0结束:\n");
while(x!=0){ //新元素进栈
scanf("%d",&x);
A.push1(x);
}
printf("\n元素进栈顺序是 :");
A.output1();
printf("\n\n");

A.pop1(X); //元素出栈
if(!A.pop1(X))
printf("元素出栈失败 !\n");
else
{
printf("\n栈顶元素是: ");
A.output(X);
printf("\n");
printf("\n元素出栈的结果是 : ");
A.output(X);
while(A.pop1(X))
A.output(X);
}
}

void main()
{
printf("----------顺序栈的调试----------\n");
printf("\n \n");
SeqStack A;
SeqStack1(A);
printf("\n \n");
}

㈦ 设计一个动态数组存储结构的顺序栈类SeqStack,

思路很简单,根放在0位置,以后假定当前位置是i,那么左子结点在2i+1,右子结点在2i+2。比如根的左子结点在1,右子结点在2。结点1的左子结点在3,右子结点在4。定义一种空值表示没有子结点,比如empty。
假定一个结点由3个成员组成:value, left, right
数组假定是全局的,如果不是可以作为参数传送。
递归实现比较简单:
void btree2array(node, index)
{
if(node == NULL)
array[index] = empty;
array[index] = node->value;
btree2array(node->left, index * 2 + 1);
btree2array(node->right, index * 2 + 2);
}

开始调用的时候就一句话:
btree2array(root, 0);
另外,虚机团上产品团购,超级便宜

热点内容
桌面文件限制存储大小 发布:2025-01-10 20:28:45 浏览:78
安卓车机怎么把应用放界面 发布:2025-01-10 20:28:36 浏览:678
减算法小学 发布:2025-01-10 20:22:41 浏览:797
ig源码网 发布:2025-01-10 20:20:04 浏览:418
stm芯片用什么编译器 发布:2025-01-10 19:35:27 浏览:414
易语言qq登陆器源码 发布:2025-01-10 19:35:00 浏览:888
java生成文件 发布:2025-01-10 19:30:35 浏览:31
文件链接上传 发布:2025-01-10 19:30:32 浏览:907
linux安装sqlite 发布:2025-01-10 19:09:43 浏览:83
java工程师证 发布:2025-01-10 18:54:02 浏览:36