c语言栈生长
❶ c语言 栈
回答:
1,stacksize记录的就是当前栈的大小。至于为什么你认为它不会变化,是因为你只注意它会+1或者-1.请看代码中的片段:
//进栈
void 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(1);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT; // 进栈操作之后,stacksize从之前的值变为了加上
// STACKINCREMENT之后的值。
}
*S->top++=e;
}//Push
2,那你认为s->base到底指向了哪里呢?你混淆了一个概念。就像你的提问中说的:“假设现在栈的长度是10,单位0-9都有元素,即满栈”。这时,s->base指向的位置是0,而s->top指向的单元却是9,0-9一共多少?请自己算算。
❷ 急求c语言关于堆栈的长度
找本数据结构书,都是最简单的例程代码,真的懒得敲一遍了
❸ c语言中的栈是指什么啊
是一种数据结构.这种结构的存取原则相当于取放盘子的过程,放的时候将盘子一个一个堆起来放,取的时候先取原先最后放入的一个,然后依次类推.即后进先出的原则.
栈有顺序(数组等)和链式(链表)两种存储结构,它的逻辑结构实质是线性表中的一种,只是这种线性表只允许在其中一端进行存取操作.更为详细的解释请参考数据结构一书!
❹ c语言建栈
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef int Status;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct
{
ElemType *base; //在栈构造和销毁之后,base的值为NULL
ElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
// 构造一个空栈S
Status InitStack(SqStack &S)
{
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base) //存储分配失败
exit (OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////
Status GetTop(SqStack S,ElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}//GetTop
////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////
Status Push(SqStack &S,ElemType e)
{
if(S.top-S.base>=S.stacksize) //栈满,追加存储空间
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(ElemType));
if(!S.base)
exit (OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push
////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
Status Pop(SqStack &S,ElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}//Pop
////////// main() //////////////////////////////
void main()
{
int i;
char ch,e,c;
SqStack S;
InitStack(S);
printf("1.Push\t2.Pop\t3.GetTop\t4.exit\n");
while(1)
{
printf("请选择:");
scanf("%d",&i);
c=getchar(); //*****接受回车符******
switch (i)
{
case 1:
printf("请输入要插入的元素:");
scanf("%c",&ch);
Push(S,ch);
break;
case 2:
printf("弹出栈顶元素:");
Pop(S,e);
printf("%c\n",e);
break;
case 3:
printf("取栈顶元素:");
GetTop(S,e);
printf("%c\n",e);
break;
case 4:
exit(0);
default:
printf("ERROR!Please Reput A Number\n");
}
}
}
❺ c语言中,栈是具体应用方法和步骤
栈简单的讲就是一片存储区域(存储区的首地址即为栈顶)
你可以向栈中存入数据取出数据删除数据
/* Note:Your choice is C IDE */
#include "stdio.h"
#define m 100
struct Mystack/*定义栈结构*/
{
char element[m];
int top;/*栈顶*/
};
void push(struct Mystack *s,char x) /*将x的值压入栈顶*/
{
/* s->element[s->top]=x;
s->top++;*/
s->element[s->top]=x;
s->top++;
}
void pop(struct Mystack *s)
/*将栈顶元素删除*/
{
s->top--;
}
int IsEmpty(struct Mystack *s)
/*判断栈是否为空*/
{
if(s->top==0)
return 1;
else
return 0;
}
void Clearstack(struct Mystack *s)
/*清空栈元素*/
{
s->top=0;
}
void Displaystack(struct Mystack *s)
/*输出栈元素*/
{
int i;
for(i=0;i<s->top;i++)
printf("%c",s->element[i]);
}
main()
{
struct Mystack st;
int i;
char ch;
for(i=0;i<100;i++)
st.element[i]='\0';
st.top=0;
printf("please write a string:\n");
ch=getchar();
while(ch!='\n')
{
switch(ch)
{
case '#':
if(!IsEmpty(&st))
pop(&st);
break;
case '@':
if(!IsEmpty(&st))
Clearstack(&st);
break;
default:
push(&st,ch);
}
ch=getchar();
}
printf("the string is :\n");
Displaystack(&st);
}
❻ C语言怎么求顺序栈长度
这是指针相减的特性,指针相减就是两个之间的元素个数。
(unsigned int)S->top - (unsigned int)S->base; // 要得到实际的地址值相减强制转换成整数就行了