您的位置:

c语言初始化顺序栈,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语言中如何初始化栈 每个元素均为空

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语言顺序栈的问题

for(i = s-top; i=0; i--) { //遍历栈

printf("%d-",s-data);

}

这里data你定义的是数组名所以

printf("%d-",s-data[i]);

求采纳,求经验,求悬赏

希望能解决您的问题。

求用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语言的顺序栈的操作

这是我以前写的,今天不想砍代码,就发这个了

#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);

}