顺序栈的c语言实现(c语言顺序栈的实现以及操作)

本篇文章给大家谈谈顺序栈的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语言实现(c语言顺序栈的实现以及操作)

关于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语言顺序栈的实现以及操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月1日 02:22:37
下一篇 2024年4月1日 02:30:59

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4100
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5800
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4500
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4500
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7500
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6500
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4700
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    5000
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4500

发表回复

登录后才能评论



关注微信