C語言棧空
① 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;
}