本篇文章给大家谈谈顺序栈的c语言实现,以及c语言顺序栈的实现以及操作对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言编程实现顺序栈的初始化,入栈,出栈,取栈顶元素,显示操作2、关于C语言的顺序栈的操作3、求用C语言编写一个程序实现顺序栈初始化,出栈,入栈,判栈空,判栈满,急需,谢谢4、怎么用c语言实现一个顺序栈5、那位C语言高手能解决用C语言和数据结构帮我编写一个顺序栈的,实现任意表达式.注:一定要用顺序栈的!6、用顺序表实现栈的基本操作(基于C语言)求解答
C语言编程实现顺序栈的初始化,入栈,出栈,取栈顶元素,显示操作
#define STACKSIZE 100
int mstack[STACKSIZE],top,bottom;
void mInitStack() { top=bottom=0; }
void mPush(int x) { if ( top-bottom=STACKSIZE ) { mstack[top]=x; top++; } }
int mPop() { int r=0; if ( topbottom ) { r=mstack[top]; top–; } return r; }
void mShowStack() { int i; printf(“[“); for ( i=bottom;itop;i++ ) printf(“%d “,mstack[i]); printf(“]\n”); }
void main()
{
int i,n,x,loop=1,s;
char buffer[80];
mInitStack();
scanf(“%d”,n); for ( i=0;in;i++ ) { scanf(“%d”,x); mPush(x); }
mShowStack();
while ( loop )
{ buffer[1]=0; gets(buffer); s=1;
switch ( buffer[1] )
{ case ‘O’:
case ‘o’: x=mPop(); break;
case ‘U’:
case ‘u’: x=atoi(buffer+5); mPush(x); break;
case ‘n’:
case ‘N’: loop=0; break;
default: s=0; break;
}
mShowStack();
}
mShowStack();
}
关于C语言的顺序栈的操作
这是我以前写的,今天不想砍代码,就发这个了
#includestdio.h
#includestdlib.h
#define N 100
//栈的结构定义
typedef struct
{
int elem[N];
int top;//栈顶
}Stack;
//循环队列的结构定义
typedef struct
{
int elem[N];
int front;
int rear;
}Queue;
int Greatstack(Stack*);
int GreatQueue(Queue *);
int pop(Stack *s);
void show(Stack *s);
int push(Stack *s);
int popStack(Stack *s);
int enQueue(Queue *q);
int deQueue(Queue *q);
int printQueue(Queue *q);
void conversion();
void main()
{
char exit=’N’;
int ch;
int result,data;
int m,e;
Stack s;
Queue q;
s.top=0;//栈顶指向当前栈顶的下一位置
q.front=q.rear=0;
do
{
system(“CLS”);
printf(“\t\t********************************************\n”);
printf(“\t\t* 1.创建一个顺序栈 ……………..(1) *\n”);
printf(“\t\t* 2.出栈………………………..(2) *\n”);
printf(“\t\t* 3.入栈………………………..(3) *\n”);
printf(“\t\t* 4.顺序栈中元素依次出栈,并显示…..(4) *\n”);
printf(“\t\t* 5.创建一个循环队列……………..(5) *\n”);
printf(“\t\t* 6.进队………………………..(6) *\n”);
printf(“\t\t* 7.出队………………………..(7) *\n”);
printf(“\t\t* 8.循环队列中元素依次出队,并显示…(8) *\n”);
printf(“\t\t* 9.十进制数转换为其它进制数………(9) *\n”);
printf(“\t\t* 10.退出 …………..(10) *\n”);
printf(“\t\t********************************************\n”);
printf(“\n请选择操作代码:”);
scanf(“%d”,ch);
switch(ch)
{
case 1:
printf(“创建一个顺序栈\n”);
result=Greatstack(s);
if(result==0)printf(“顺序栈创建失败,栈已满!\n”);
else printf(“顺序栈创建成功!\n”);
system(“pause”);
break;
case 2:
printf(“出栈:\n”);
m=pop(s);
if(m==0)printf(“出栈失败,栈已空!\n”);
else
{
printf(“顺序栈出栈成功!\n”);
printf(“该栈剩余元素为:”);
show(s);
}
//请加入出栈操作的代码或函数调用
system(“pause”);
break;
case 3:
printf(“进栈:\n”);
printf(“请输入入栈的元素”);
scanf(“%d”,e);
result=push(s,e);
if(result==0)printf(“栈已满!\n”);
else
{
printf(“顺序栈入栈成功!\n”);
printf(“该栈剩余元素为:”);
show(s);
}
//请加入进栈操作的代码或函数调用
system(“pause”);
break;
case 4:
printf(“顺序栈中元素依次出栈,出栈序列为:\n”);
popStack(s);
//请加入依次出栈并显示元素操作的代码或函数调用
system(“pause”);
break;
case 5:
printf(“创建一个循环队列\n”);
result=GreatQueue(q);
if(result==0)printf(“循环队列创建失败,循环队列已满!\n”);
else printf(“循环队列创建成功!\n”);
system(“pause”);
break;
case 6:
printf(“入队:\n”);
data=enQueue(q);
if(result=0) printf(“队已经满了\n”);
else printf(“入队成功\n”);
//请加入入队操作的代码或函数调用
system(“pause”);
break;
case 7:
printf(“出队:\n”);
data=deQueue(q);
if(data=0) printf(“队已经空了\n”);
else printf(“出队成功\n”);
//请加入依次出队操作的代码或函数调用
system(“pause”);
break;
case 8:
printf(“循环队列中元素依次出队,出队序列为:\n”);
//请加入依次出队并显示元素操作的代码或函数调用
data=printQueue(q);
system(“pause”);
break;
case 9:
printf(“十进制数转换为其它进制数:\n”);
conversion();
//请加入十进制数转换为其它进制数操作的代码或函数调用
system(“pause”);
break;
case 10:
getchar();
printf(“\n您是否真的要退出程序(Y/N):”);
exit=getchar();getchar();
break;
default:
printf(“\n无效输入,请重新选择…:”);
}
}while(exit!=’y’exit!=’Y’);
}
/*从键盘输入一系列整数,当输入值为0时,停止输入,产生顺序栈*/
/*返回0表示生成成功,1表示失败*/
int Greatstack(Stack *s)
{
int e;
s-top=0;//栈顶指向当前栈顶的下一位置
printf(“请依次输入需要入栈的元素,以0表示输入结束:”);
do
{
scanf(“%d”,e);
if(e!=0)
{ if(s-top=N)return 0;//栈满
s-elem[s-top++]=e;
}
}while(e!=0);
}
/*从键盘输入一系列整数,当输入值为0时,停止输入,产生循环队列*/
/*返回0表示生成成功,1表示失败*/
int GreatQueue(Queue *q)
{
int e;
q-front=q-rear=0;//初始化队列
printf(“请依次输入需要入栈的元素,以0表示输入结束:”);
do
{
scanf(“%d”,e);
if(e!=0)
{ if((q-rear+1)%N==q-front)return 0;//队满
q-elem[q-rear]=e;
q-rear=(q-rear+1)%N;
}
}while(e!=0);
return 1;
}
int pop(Stack *s) //出栈
{
if(s-top==0)
return 0;
–s-top;
}
void show(Stack *s) //显示栈中的元素
{
int i=s-top;
while(i!=0)
{
–i;
printf(“%d “,s-elem[i]);
}
}
int push(Stack *s,int e) //入栈
{
if(s-top=N)return 0;
s-elem[s-top++]=e;
}
int popStack(Stack *s) //顺序栈中元素依次出栈,并显示
{
while(s-top!=0)
{
–s-top;
printf(“%3d”,s-elem[s-top]);
}
return 0;
}
int enQueue(Queue *q) //入队
{
int e;
printf(“请输入入栈的元素:”);
scanf(“%d”,e);
if((q-rear+1)%N == q-front) return 0;
q-elem[q-rear]=e;
q-rear=(q-rear+1)%N;
return 1;
}
int deQueue(Queue *q) //出队
{
int *e;
if(q-front == q-rear) return 0;
e =q-elem[q-front];
q-front=(q-front+1)%N;
return 1;
}
int printQueue(Queue *q) //循环队列中元素依次出队,并显示
{
if(q-front == q-rear) return 0;
for(;q-front!=q-rear;)
{
printf(“%3d”,q-elem[q-front]);
q-front++;
}
}
void conversion() //十进制数转换为其它进制数
{
Stack p1;
int n,m;
puts(“请输入需要转换的元素:”);
scanf(“%d”,n);
puts(“请输入需要转换的进制:”);
scanf(“%d”,m);
p1.top=0;
while(n)
{
push(p1,n%m);
n=n/m;
}
popStack(p1);
}
求用C语言编写一个程序实现顺序栈初始化,出栈,入栈,判栈空,判栈满,急需,谢谢
#define STACK_SIZE 100
#define PUSH_POP_SUCCESS 1
#define PUSH_POP_ERROR 0
struct _stackbuf {
int _collection[STACK_SIZE];
int _top;
};
typedef struct _stackbuf S_STACK;
typedef unsigned int u_int_f;
// 入栈
u_int_f push(S_STACK *stack, int d){
if (stack-_top = STACK_SIZE) return PUSH_POP_ERROR;
stack-_collection[stack-_top++] = d;
return PUSH_POP_SUCCESS;
}
// 出栈
u_int_f pop(S_STACK *stack, int *e){
if (!stack-_top) return PUSH_POP_ERROR;
*e=stack-_collection[–(stack-_top)];
return PUSH_POP_SUCCESS;
}
int main(){
S_STACK stack = { {0},0 };
push(stack, 1);
push(stack, 2);
push(stack, 3);
int gv = 0;
pop(stack, gv);
printf(“%d\n”, gv);
system(“PAUSE”);
return 0;
}
怎么用c语言实现一个顺序栈
char stack[100],s[300];
int i,top=-1;
scanf(“%s”,s);
for(i=0;s[i];i++)
{
if(s[i]=='(‘||s[i]=='[‘||s[i]=='{‘)stack[++top]=s[i];
else if(s[i]==’)’||s[i]==’]’||s[i]==’}’)
if(top=0(stack[top]=='(‘s[i]==’)’||stack[top]=='[‘s[i]==’]’||stack[top]=='{‘s[i]==’}’))–top;
else {printf(“error!\n”); return 0;}
}
if(top==0)printf(“OK!\n”);
else printf(“error!\n”);
那位C语言高手能解决用C语言和数据结构帮我编写一个顺序栈的,实现任意表达式.注:一定要用顺序栈的!
#define stacksize 100//栈最大空间
typedef int elemtype;//栈中元素类型
typedef struct
{
int top;//栈顶指针
elemtype data[stacksize];
}stack;//顺序栈类型
void initstack(stack s)//建立空栈
{
s.top=-1;
}
void push(stack s,elemtype e)//压栈
{
if(s.top=stacksize)
{
printf(“full!”);
return;
}
s.data[++s.top]=e;
}
void pop(stack s,elemtype e)//弹栈
{
if(s.top=-1)
{
printf(“empty stack!”);
return;
}
e=s.data[s.top–];
}
bool stackempty(stack s)//判断栈非空
{
if(s.top==-1)return true;
return false;
}
用顺序表实现栈的基本操作(基于C语言)求解答
/顺序栈
#includestdio.h
#includestdlib.h
#includemalloc.h
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
typedef int ElemType;
int InitStack(SqStack S) //为栈S分配存储空间,并置S为空栈
{
int size = STACK_INIT_SIZE;
S.base=(int *)malloc(size*sizeof(ElemType));
if(!S.base)
return 0;
S.top=S.base; //置栈S为空栈
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int GetTop(SqStack S,int e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/
{ if(S.top-S.base=S.stacksize) /*栈满,追加存储空间*/
{
int stackinvrement = STACKINCREMENT;
S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));
if(!S.base)
return 0; /*存储分配失败*/
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack S,int e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/
{ if(S.top==S.base) return 0;
e=*–S.top;
return 1;
}
void OutputStack(SqStack S)
{int *q;
q=S.top-1;
for(int i=0;iS.top-S.base;i++)
{
printf(“%3d “,*q);q–;}
}
void main()
{
int a,b,c ;
char m;
SqStack s;
InitStack(s);
printf(“请输入要进栈的元素个数是:”);
scanf(“%d”,a);
printf(“\n请输入要进栈的%d个元素:”,a);
for(b=0;ba;b++) {
scanf(“%d”,c);
Push(s,c); }
do { printf(“\n”);
printf(“*********** 1.输出栈的元素**********\n”);
printf(“*********** 2.取栈顶元素************\n”);
printf(“*********** 3.删除栈顶元素**********\n”);
printf(“*********** 4.退出程序**********\n”);
printf(“\n请选择一个字符:”);
getchar();
scanf(“%c”,m);
switch(m) {
case ‘1’: printf(“\n输出的栈为:”);
OutputStack(s);
break;
case ‘2’: GetTop(s,c);
printf(“\n栈顶元素为:%d”,c);
printf(“\n输出的栈为:”);
OutputStack(s);
break;
case ‘3’: Pop(s,c);
printf(“\n删除的栈顶元素:%d”,c);
printf(“\n输出的栈为:”);
OutputStack(s);
printf(“\n”);
break;
case ‘4’:break;
default: printf(“输入的数字有错,请重新选择!\n”); break;
}
}while(m!=’4′);
}
//链栈
#includestdio.h
#includestdlib.h
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack top;
LinkStack PushStack(LinkStack top,int x) //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s-data=x;
s-next=top;
top=s;
return top;
}
LinkStack PopStack(LinkStack top) //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top-next;
free(p);
printf(“退栈已完成\n”);
return top;
}
else printf(“栈是空的,无法退栈!\n”); return 0;
}
int GetStackTop(LinkStack top) //取栈顶元素
{
return top-data;
}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型
{
return top==NULL ? true:false;
}
void Print()
{
SNode *p;
p=top;
if(IsEmpty())
{
printf(“The stack is empty!\n”);
return;
}
while(p)
{
printf(“%d “, p-data);
p=p-next;
}
printf(“\n”);
}
void main()
{
int x,a,b;
char m;
do { printf(“\n”);
printf(“###############链栈的基本操作##################\n”);
printf(“××××××××1.置空栈××××××××××\n”);
printf(“××××××××2.进栈×××××××××××\n”);
printf(“××××××××3.退栈×××××××××××\n”);
printf(“××××××××4.取栈顶元素××××××××\n”);
printf(“××××××××5.退出程序×××××××××\n”);
printf(“##############################################\n”);
printf(“\n请选择一个字符:”);
scanf(“%c”,m);
switch(m){
case ‘1’:
top=NULL;
printf(“\n栈已置空!”);
break;
case ‘2’:
printf(“\n请输入要进栈的元素个数是:”);
scanf(“%d”,a);
printf(“\n请输入要进栈的%d个元素:”,a);
for(b=0;ba;b++) {
scanf(“%d”,x);
top=PushStack(top,x); }
printf(“进栈已完成!\n”);
printf(“\n输出栈为:”);
Print();
break;
case ‘3’:
printf(“\n操作之前的输出栈为:”);
Print();
top=PopStack(top);
printf(“\n操作过后的输出栈为:”);
Print();
break;
case ‘4’:
printf(“\n输出栈为:”);
Print();
if(top!=NULL)
printf(“\n栈顶元素是:%d\n”,GetStackTop(top));
else
printf(“\n栈是空的,没有元素!”);
break;
case ‘5’:break;
default:
printf(“\n输入的字符不对,请重新输入!”);
break;
}
getchar();
}while(m!=’5′);
}
关于顺序栈的c语言实现和c语言顺序栈的实现以及操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。