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; // 要得到實際的地址值相減強制轉換成整數就行了