當前位置:首頁 » 編程語言 » c語言棧生長

c語言棧生長

發布時間: 2023-08-07 10:27:37

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

熱點內容
津貼腳本 發布:2025-02-06 19:44:10 瀏覽:739
好分數里如何修改密碼 發布:2025-02-06 19:42:30 瀏覽:155
mysql存儲過程判斷 發布:2025-02-06 19:40:15 瀏覽:853
bat編譯器的作用 發布:2025-02-06 19:26:54 瀏覽:343
phpajaxsession 發布:2025-02-06 19:20:56 瀏覽:623
西安java學習 發布:2025-02-06 19:15:44 瀏覽:623
微信電影源碼網站 發布:2025-02-06 18:55:21 瀏覽:934
本地建mysql資料庫 發布:2025-02-06 18:54:23 瀏覽:762
屏幕看不清了如何輸密碼 發布:2025-02-06 18:51:14 瀏覽:333
手機開腳本買個什麼配置的 發布:2025-02-06 18:45:59 瀏覽:113