當前位置:首頁 » 編程語言 » C語言棧空

C語言棧空

發布時間: 2022-11-14 20:19:50

c語言中如何初始化棧 每個元素均為空

<1>如果順序棧的定義如下
typedef struct
{datatype data[stacksize];
int top;
}SeqStack;
---則置空棧的操作如下
void InitStack(seqstack *s)
{s->top=-1;
}

<2>如果鏈棧的定義如下
typedef struct node
{datatype data;
struct node *next;
}LinkStack;
---則置空棧的操作如下
void InitStack(linkstack *s)
{s->top=null;
}

② c語言版數據結構 空棧的構造

棧的本意是一個數組,裡面存取數據的方式是先進後出。因此,你需要一個cusor來指定當前的棧頂(可能你使用top實現的),你可能還需要當前存放了多少數據進棧了,棧是否空、滿,因此你還需要一個int變數計算棧元素個數。沒push+1,沒pop
-1。你完全不需要成員stacksize,還有你需要一個棧元素個數的計數器。另外你不需要將形參由引用該為指針,反而降低效率!

③ C語言中如何初始化棧 每個元素均為空

<1>如果順序棧的定義如下
typedef
struct
{datatype
data[stacksize];
int
top;
}SeqStack;
---則置空棧的操作如下
void
InitStack(seqstack
*s)
{s->top=-1;
}
<2>如果鏈棧的定義如下
typedef
struct
node
{datatype
data;
struct
node
*next;
}LinkStack;
---則置空棧的操作如下
void
InitStack(linkstack
*s)
{s->top=null;
}

④ 用c語言可執行文件實現順序棧的出棧、入棧、判棧空、判棧滿!急求啊,謝謝各位朋友的幫助啊!!!!!!

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2

棧定義
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

typedef int Status;

出棧
Status Pop(SqStack *S,SElemType *e)
{
if((*S).top == (*S).base)
return ERROR;
*e = * --(*S).top;
return OK;
}

入棧
Status Push(SqStack *S,SElemType e)
{
if((*S).top - (*S).base >= (*S).stacksize)
{
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW);
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++ = e;
return OK;
}
判棧空
Status StackEmpty(SqStack S)
{
if(S.top == S.base) return TRUE;
else return FALSE;
}

判棧滿
Status StackFull(SqStack S)
{
if(S.top - S.base >= S.stacksize)
return TRUE;
else return FALSE;
}

⑤ 數據結構 用C語言判斷一個棧是否為空的演算法

判斷棧頂指針與棧底指針是否相等(是否指向同一個結點)。
如果相等則為空。
否則非空。

⑥ c語言版數據結構 空棧的構造

棧的本意是一個數組,裡面存取數據的方式是先進後出。因此,你需要一個cusor來指定當前的棧頂(可能你使用top實現的),你可能還需要當前存放了多少數據進棧了,棧是否空、滿,因此你還需要一個int變數計算棧元素個數。沒push+1,沒pop -1。你完全不需要成員stacksize,還有你需要一個棧元素個數的計數器。另外你不需要將形參由引用該為指針,反而降低效率!

⑦ c語言 棧的操作

#include
#include

#define Max 100

typedef char T;

typedef struct MyStack
{
T aa[Max];
unsigned int p;

} stack;

//創建空棧
stack* createEmptyStack()
{
stack* st = (stack *)malloc(sizeof(stack));
int i=0;
for(i=0;i<Max;i++)
st->aa[i]=0;
st->p=0;
return st;
};

//棧判空
int isEmpty(const stack* st)
{
if(st->p==0) return 1;
else return 0;
};

//求棧的大小
unsigned int size(const stack* st)
{
return st->p;
};

//push操作
void push(stack* st,const T a)
{
st->p=st->p+1;
if(st->p==Max)
{
printf("棧滿\n");
st->p--;
return;
}
st->aa[st->p]=a;
};

//pop操作
T pop(stack* st)
{
if(isEmpty(st))
{
printf("棧空");
return NULL;
}
char t=st->aa[st->p];
st->p=st->p-1;
printf("%c ",t);
return t;
};

//棧銷毀
void destroy(stack* st)
{
free(st);
};

int main()
{

stack* st = createEmptyStack();
if(isEmpty(st)) printf("MyStack is empty\n");
else printf("MyStack is not empty\n");
push(st,'a');
push(st,'b');
push(st,'c');
push(st,'d');
push(st,'e');
printf("%d\n",size(st));
while(!isEmpty(st)) pop(st);
destroy(st);
system("pause");
return 0;
}

⑧ c語言關於棧的問題

首先你題目沒理解正確
(1)如果字元串中的應匹配的左括弧和右括弧不是同一類型,輸出wrong
就是([123)這種應該輸出wrong,而不是missing right

其次你的思路不太對,既然知道這題是考你棧結構的你就應該用棧解決啊,給你幾個提示:
1、這題只用一個數組作為棧的物理空間就夠了(當然還要有個char數組存放輸入)
2、這題你用不著保存數字和右括弧
3、絕大多數match以外的字元串不用掃描全就可以輸出了,不然就算不WA可能要TO了
4、push pop peek這三種棧的操作都要用上

(演算法思路,想獨立完成就別看)












從左往右掃描字元串
遇到左括弧壓棧
遇到右括弧去和棧頂匹配
棧已經空了沒棧頂: miss left
匹配成功:彈出棧頂繼續掃描
匹配不成功:wrong
遇到字元結尾

棧空了:match
否則:miss right
遇到其他數字啥的忽略掉

⑨ C語言構造空棧為什麼要在S前加一個&

這里涉及到C/C++中函數調用時的參數傳遞。一般來說,都是值得傳遞,形參的值的改變不影響實參的值。
但在某些情況下,希望函數調用中的形參改變,實參也跟著改變。就像構造一個空棧,此時表示這個棧的數據結構剛被建立起來,原來棧不存在,現在被建立了,改變了,而按通常的方式是不行的。
C++提供了一種被稱為引用的參數傳遞方式,就能實現形參改變實參也跟著改變的效果,也就是問題中說的前面加&的情況。

⑩ 棧的操作,用c語言急!

#include<stdio.h>
#include<malloc.h>
#define DataType int
#define MAXSIZE 1024
typedef struct
{
DataType data[MAXSIZE];
int top;
}SeqStack;
SeqStack *Init_SeqStack()//棧初始化
{
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
if(!s)
{
printf("空間不足\n");
return NULL;
}
else
{
s->top=-1;
return s;
}
}
int Empty_SeqStack(SeqStack *s)//判棧空
{
if(s->top==-1)
return 1;
else
return 0;
}
int Push_SeqStack(SeqStack *s,DataType x)//入棧
{
if(s->top==MAXSIZE-1)
return 0;//棧滿不能入棧
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
int Pop_SeqStack(SeqStack *s,DataType *x)//出棧
{
if(Empty_SeqStack(s))
return 0;//棧空不能出棧
else
{
*x=s->data[s->top];
s->top--;
return 1;
}//棧頂元素存入*x,返回
}
DataType Top_SeqStack(SeqStack *s)//取棧頂元素
{
if(Empty_SeqStack(s))
return 0;//棧空
else
return s->data[s->top];
}
int Print_SeqStack(SeqStack *s)
{
int i;
printf("當前棧中的元素:\n");
for(i=s->top;i>=0;i--)
printf("%3d",s->data[i]);
printf("\n");
return 0;
}
int main()
{
SeqStack *L;
int n,num,m;
int i;
L=Init_SeqStack();
printf("初始化完成\n");
printf("棧空:%d\n",Empty_SeqStack(L));
printf("請輸入入棧元素個數:\n");
scanf("%d",&n);
printf("請輸入要入棧的%d個元素:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&num);
Push_SeqStack(L,num);
}
Print_SeqStack(L);
printf("棧頂元素:%d\n",Top_SeqStack(L));
printf("請輸入要出棧的元素個數(不能超過%d個):\n",n);
scanf("%d",&n);
printf("依次出棧的%d個元素:\n",n);
for(i=0;i<n;i++)
{
Pop_SeqStack(L,&m);
printf("%3d",m);
}
printf("\n");
Print_SeqStack(L);
printf("棧頂元素:%d\n",Top_SeqStack(L));
return 0;
}

熱點內容
ps工作需要什麼配置電腦 發布:2025-01-12 21:52:22 瀏覽:605
福州優信解壓 發布:2025-01-12 21:50:40 瀏覽:429
會員過期緩存的能看嗎不聯網 發布:2025-01-12 21:16:47 瀏覽:768
演算法工作原理 發布:2025-01-12 20:36:38 瀏覽:25
網路訪問監控軟體 發布:2025-01-12 20:26:57 瀏覽:466
養羊啦源碼 發布:2025-01-12 20:25:48 瀏覽:571
軒逸朗逸哪個配置最好 發布:2025-01-12 20:10:00 瀏覽:50
主板存儲器分 發布:2025-01-12 20:04:46 瀏覽:377
資料庫邏輯運算 發布:2025-01-12 20:03:54 瀏覽:572
javawindows伺服器搭建 發布:2025-01-12 19:59:37 瀏覽:571