栈的顺序存储结构

一:栈的顺序存储结构

这是结果,需要的话给我个邮箱

/*

在vc++6.0中的输出结果:

------------------------

初始化栈.....

创建一个包含5个不大于100的正整数值的栈(5个值由计算机随机产生)...

栈中的元素从栈底到栈顶为:41 67 34 0 69

请输入要插在栈顶的元素e = 100

栈中的元素从栈底到栈顶为:41 67 34 0 69 100

弹出的栈顶元素 e = 100

栈中的元素从栈底到栈顶为:41 67 34 0 69

栈中元素个数是5

输出从栈顶到栈底的所有元素:69 0 34 67 41

Press any key to continue

--订---------------------------

*/

二:栈是不是顺序存储的线性结构啊?

呃~弄明白两个概念:存储结构和逻辑结构。主要的存储结构是顺序存储和链式存储(基本这两个就OK了)。而逻辑结构是指线性表(栈、队列属于线性表的范畴)、图、二叉树等概念。理论上所有的逻辑结构都可以用上面两种存储结构在计算机内实现(当然从效率、存储空间等方面考虑实际实现中不同的逻辑结构采用的存储结构会有所偏重)~举个类似的例子:汽车和内燃机,内燃机主要有汽油机和柴油机两类,汽车有卡车、轿车、客车等,理论上所有的汽车都可以用两种内燃机做动力,我可以说客车是汽车,客车既可以是汽油机驱动的汽车也可以有柴油机驱动的汽车。所以栈是线性表,但栈既可以用可以顺序存储实现也可以用链式存储实现。

三:栈只能顺序存储,这句话对吗,为什么

错的。栈可以有顺序和链式两种储存方式。

四:定义栈的顺序存储结构,实现入栈操作,出栈操作,判断栈为空的基本操作,设计算法,

下面是一个栈的算法

#include #include typedef struct Node{int iData;struct Node* pNext;}Node;void push(Node** pTop, int iData){Node* pNew = (Node*)malloc(sizeof(Node));pNew->pNext = NULL;pNew->iData = iData;if (NULL == (*pTop)){(*pTop) = pNew;}else{pNew->pNext = (*pTop);(*pTop) = pNew;}}void pop(Node** pTop){Node *pDel=NULL;if (NULL == (*pTop)){printf("Empyt stack!\n");}else{printf("stack value: %d\n", ((*pTop))->iData);pDel = (*pTop);(*pTop) = (*pTop)->pNext;}}void print_stack(Node* pTop){Node* p = pTop;while(p){printf("print_stack:%d\n",p->iData);p = p->pNext;}}int main(){Node* pTop = NULL;int i,ii;for (i=1; i<10; i++){push(&pTop, i);}print_stack(pTop);for (ii=1; ii<10; ii++){pop(&pTop);}return 0;}

五:分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。

顺序存储结构

#include

typedef char ElemType;

#define MaxSize 100

using namespace std;

typedef struct

{

ElemType data[MaxSize];

int top;

}sqStack;

void InitStack(sqStack *&s);//初始化栈

void ClearStack(sqStack *&s);//摧毁栈

int StackLength(sqStack *s);//返回栈的长度

bool StackEmpty(sqStack *s);//判断栈是否为空

int Push(sqStack *&s,ElemType e);//进栈

int Pop(sqStack *&s,ElemType &e);//出栈

int GetTop(sqStack *s,ElemType &e);//取栈顶元素

void DispStack(sqStack *s);//显示栈中元素值

int main()

{

return 0;

}

void InitStack(sqStack *&s)//初始化栈

{

s=new sqStack;

s->top=-1;

}

void ClearStack(sqStack *&s)//摧毁栈

{

delete s;

}

int StackLength(sqStack *s)//返回栈的长度

{

return (s->top+1);

}

bool StackEmpty(sqStack *s)//判断栈是否为空

{

return (s->top==-1);

}

int Push(sqStack *&s,ElemType e)//进栈

{

if(s->top==MaxSize-1)

return 0;

s->top++;

s->data[s->top]=e;

return 1;

}

int Pop(sqStack *&s,ElemType &e)//出栈

{

if(s->top==-1)

return 0;

e=s->data[s->top];

s->top--;

return 1;

}

int GetTop(sqStack *s,ElemType &e)//取栈顶元素

{

if(s->top==-1)

return 0;

e=s->data[s->top];

return 1;

}

void DispStack(sqStack *s)//显示栈中元素值

{

for(int i=s->top;i>=0;i--)

cout<data[i]<<" ";

cout<

}

链式存储结构

typedef char ElemType;

typedef struct linknode

{

ElemType data;

struct linknode *next;

}LiStack;

void InitS......余下全文>>

六:顺序存储结构的栈时间复杂度是多少

这是结果,需要的话给我个邮箱

/*

在vc++6.0中的输出结果:

------------------------

初始化栈.....

创建一个包含5个不大于100的正整数值的栈(5个值由计算机随机产生)...

栈中的元素从栈底到栈顶为:41 67 34 0 69

请输入要插在栈顶的元素e = 100

栈中的元素从栈底到栈顶为:41 67 34 0 69 100

弹出的栈顶元素 e = 100

栈中的元素从栈底到栈顶为:41 67 34 0 69

栈中元素个数是5

输出从栈顶到栈底的所有元素:69 0 34 67 41

Press any key to continue

------------------------------

*/

七:当栈采用顺序存储结构时,栈顶元素值可用什么表示

存储结构和逻辑结构。主要的存储结构是顺序存储和链式存储(基本这两个就OK了)。而逻辑结构是指线性表(栈、队列属于线性表的范畴)、图、二叉树等概念。理论上所有的逻辑结构都可以用上面两种存储结构在计算机内实现

八:为什么栈和队列均可以采用顺序存储结构和链式存储结构

他们都是线性表,所以当然可以了。

线性结构决定了这一切呀。

他们就像一排站在一条线上的人,位置关系是一个挨一个的,这样的顺序不会改变,而改变攻都在头或者尾,仍然保持形态不变的。

而你对比那两种结构,只要结构一样,自然就可以转化了

扫一扫手机访问

发表评论