當前位置:首頁 » 編程語言 » 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-03-21 08:04:10 瀏覽:677
如何把伺服器掛在網站上 發布:2025-03-21 08:03:32 瀏覽:206
中國彩票的網是什麼密碼 發布:2025-03-21 07:25:06 瀏覽:442
蘋果稅與安卓哪個收費更狠 發布:2025-03-21 07:17:52 瀏覽:294
通過一個ip訪問兩台伺服器嗎 發布:2025-03-21 07:06:12 瀏覽:522
怎麼讓伺服器查不到我的ip地址 發布:2025-03-21 07:05:27 瀏覽:184
編譯器有什麼用 發布:2025-03-21 07:00:24 瀏覽:78
android百度雲盤 發布:2025-03-21 06:59:47 瀏覽:261
青雲存儲 發布:2025-03-21 06:50:03 瀏覽:403
王者榮耀有腳本嗎 發布:2025-03-21 06:50:00 瀏覽:806