C语言入栈出栈操作的程序,希望有人为我解答

作者&投稿:右于 (若有异议请与网页底部的电邮联系)
关于用C语言写的入栈和出栈程序,栈操作的问题~

78,79行应改成top=top->next;free(p1);

如下:
#include "stdio.h"struct stackNode{ int data; struct stackNode *nextPtr;};typedef struct stackNode LISTSTACK;typedef LISTSTACK *STACKNODEPTR;void push(STACKNODEPTR *,int);int pop(STACKNODEPTR *);int isEmpty(STACKNODEPTR);void printStack(STACKNODEPTR);void instruct();int main(){ int item; int choice; STACKNODEPTR sPtr=NULL; instruct(); printf("choose your choice
"); scanf("%d",&choice); while(choice!=3) { switch(choice) { case 1: printf("please input an integer!
"); scanf("%d",&item); //printf("%d
",item); push(&sPtr,item); printStack(sPtr); break; case 2: if(!isEmpty(sPtr)) { printf("deleting element of top stack
"); pop(&sPtr); printStack(sPtr); } else{ printf("no element in the stack
"); } break; default: printf("invalid input,check your input!
"); break; } printf("pleace choose your choice "); instruct(); scanf("%d",&choice); }}void instruct(){ printf("Following the instruction below:
" "1:insert new elment into the stack
" "2:delete the top element of the stack
" "3:to end of run
");}int isEmpty(STACKNODEPTR sPtr){ return sPtr==NULL;}void printStack(STACKNODEPTR sPtr){ if(sPtr==NULL) { printf("The stack is empty!
"); } else{ printf("The elements of the stack:
"); while(sPtr!=NULL) { printf("%d-->",sPtr->data); sPtr=sPtr->nextPtr; } printf("NULL

"); }}void push(STACKNODEPTR *topPtr,int value){ STACKNODEPTR newPtr; newPtr=malloc(sizeof(STACKNODEPTR)); if(newPtr!=NULL) { newPtr->data=value; newPtr->nextPtr=*topPtr; *topPtr=newPtr; } else { printf("%d is not inserted into stack.No memory is availiable
"); }}int pop(STACKNODEPTR *topPtr){ STACKNODEPTR newPtr; int topValue; newPtr=*topPtr; *topPtr=(*topPtr)->nextPtr; free(newPtr); topValue=(*topPtr)->data; printf("deleting--- %d
",topValue); return topValue;}数据结构:
是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
常用数据结构:
数组 (Array)、栈 (Stack)、队列 (Queue)、链表 (Linked List)、树 (Tree)、图 (Graph)、堆 (Heap)、散列表 (Hash)

您好:

你是在学习数据结构方面的知识吧。

首先呢,你学习栈,要了解栈的定义,明白它是怎么一回事,就是去理解他的思想。

最后才去用代码来体现出来。

栈是先进后出,其实是用代码控制的,

其实你要他先进先出也可以。

你只要明白他的原理就行。

代码,你可以理解为跟计算的一种对话的语言。

不用想的那么复杂。

就好比说话,你只要知道你要说什么就行(算法),而不用刻意明白要怎么说(语法)。

下面给我出我以前写的代码,关于栈的,顺序栈,其实还有链栈。

/*   数据结构-栈   */
/*   异常的细节处理还没弄好*/
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
#define len_chu_shi 50   //初始空间大小
#define len_zeng_jia 10  //额外增加空间大小
#define OK 0       //正确
#define OVER -2     //
#define ERROR -1   //
using namespace std;
typedef int elem_type;          //元素类型
typedef int function_type;      //函数类型
typedef struct zhan
{
   elem_type *top;    //栈顶
   elem_type *base;   //栈底
   int len;           //当前空间大小
}zhan;                //栈结构

function_type Init_zhan(zhan *exam);//初始化栈
function_type Get_top(zhan *exam,elem_type *e);//获取栈顶元素
function_type Add_top(zhan *exam,elem_type *e);//增加栈顶元素
function_type Delete_top(zhan *exam, elem_type *e);//删除栈顶元素

int main(int argc,char *argv[])
{
   zhan *example = (zhan *)malloc(sizeof(zhan));
   Init_zhan(example);
   return OK;
}

function_type Init_zhan(zhan *exam)
{
   exam->base = (elem_type *)malloc(len_chu_shi*sizeof(elem_type));
   if(!exam->base)  //分配失败
     exit(OVER);
   exam->top = exam->base;
   exam->len = len_chu_shi;
   return OK;
}//--end
function_type Get_top(zhan *exam,elem_type *e)
{
   if(!exam->base)
     exit(OVER);
   *e = *(exam->top - 1);  //不能用自减运算符,那样会改变栈顶指针的值
   return OK;
}//--end
function_type Add_top(zhan *exam,elem_type *e)
{
   if(exam->len <= exam->top - exam->base)  //我个人觉得,如果 已经"<",就已经数据溢出了,就应该报错
     exam->base = (elem_type *)realloc(exam->base,(exam->len + len_zeng_jia)*sizeof(elem_type));
   if(!exam->base)  //分配失败
     exit(OVER);
   *(exam->top++) = *e;   //应该是先改变栈顶指针的内容,然后栈顶指针再自增
   exam->len += len_zeng_jia;
   return OK;
}//--end
function_type Delete_top(zhan *exam, elem_type *e)
{
   if(!exam->base)  //空栈
     exit(OVER);
   *e = *(--exam->top);  //应该是栈顶指针先自减,然后获取栈顶指针的内容
   return OK;
}//--end


追加赏金就给你答,题目太长了吧


C语言编程实现顺序栈的初始化,入栈,出栈,取栈顶元素,显示操作
define STACKSIZE 100int 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 ( top>bottom ) { r=mstack[top]; top--; } return r; }void ...

实现链式栈的基本操作:入栈、出栈、取栈顶元素、判定栈空、栈满。
\/\/给栈底赋值p->next = NULL;\/\/栈底的指针为空top = p;\/\/栈顶指向栈底}\/\/进栈void input(int value){p = (struct stack*)malloc(sizeof(struct stack));\/\/申请内存空间p->number = value;\/\/赋值p->next = top;\/\/指向原来的栈顶top = p;\/\/栈顶往上移动一位}\/\/出栈void output...

编程实现链栈的入栈和出栈操作。 在线等着你哦!
h>typedef struct Snode { int data;\/*数据域*\/ struct Snode *next;\/*指针域*\/ }SNODE,* LinkStack;\/*其中SNODE为链栈中的结点类型名, LinkStack为指向结点的指针类型名*\/ \/\/\/LinkStack Push(LinkStack top,int e) \/*将数据元素e压入到链栈top中,使其成为新的栈项元素*...

一道汇编语言题,望一步一步解释下出栈和入栈到底是怎么进行的...
POP AX,出栈2字节,PUSH AX,入栈2字节,POP EAX 出栈4字节,PUSH EAX ,入栈4字节。SP就是根据这个来变化的。不管你采纳谁的答案,希望你采纳一个,这样才有人想帮您。也希望这些能对你有一些帮助。上一个问题即时查看。汇编是一门比较贴近硬件的语言。如果有机会查看相关书籍不要错过。盲目的...

关于入栈,出栈指针和数据操作顺序的疑问
楼主,堆栈是一个抽象数据类型,规定的两项必备的基本操作分别为入栈和出栈。这个抽象数据类型并没规定入栈与出栈具体要怎么实现。你问的问题已经在实现这一层面上,所以按照堆栈这种抽象数据类型的规定看,“先修改指针,然后插入数据,出栈时刚好相反”并不是必须的,这取决于你的操作的具体实现。如果你...

C语言中的出栈是什么意思??
不是的,是把指针指的位置移动了。而非是删除数据。当把数据押入栈的时候,先移动指针,指向下一个位置,然后再押入。当把数据押出栈的时候,先指向下一个位置,然后再押入,再移动指针。出栈和入栈的操作顺序是相反的。一个先动指针,一个先动数据。该图为出栈的表示图。画画板画的,粗糙了点...

简述51单片机堆栈进栈和出栈操作规则
1.堆栈用于响应中断或调用子程序时保护断点地址,也可通过栈操作指令(push 和pop保护和恢复现场)其中e5a48de588b63231313335323631343130323136353331333337396239入栈时先SP+1再将内容压入当前SP所指示的堆栈单元 中,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中,再将 SP减1.2.中断...

关于C语言的顺序栈的操作
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("...

求C语言 栈代码要求有入栈和出栈功能谢谢
\/*---出栈操作---*\/ int Pop(linkstack *s){ int x;stacknode *p=s->top;x=p->data;s->top=p->next;free(p);return x;} \/*---显示栈内元素---*\/ void ShowStack (linkstack *s){ stacknode *p=s->top;if(p==NULL)printf("\\t\\tstack is empty.\\n");else {printf("\\...

汇编语言中,关于入栈出栈的理解。数据出栈后会被清掉吗,它还在内存单元...
数据出栈后在没有新的数据进栈前它在内存单元中的值没变,但你几乎无法常规读取(除非你知道SS及SP)。

如东县17556394715: 用c语言编写一个程序实现顺序栈的初始化,出栈和入栈.急需,谢谢 -
承邢格岚: #define STACK_SIZE 100 #define PUSH_POP_SUCCESS 1 #define PUSH_POP_ERROR 0struct _stackbuf {int _collection[STACK_SIZE];int _top; }; typedef struct _stackbuf S_STACK; typedef unsigned int u_int_f;// 入栈 u_int_f push(S_...

如东县17556394715: 急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行. -
承邢格岚: 就用这堆函数就可以了,不懂再追问 #include#define MaxSize 100 int mystack[MaxSize];/* 第0个单元保存现在的长度 *//* 初始化函数 */ void init_stack(int* stack){memset(stack,0,sizeof(stack)); }/* 入栈函数 */ void push_back(int* ...

如东县17556394715: 求C语言 栈代码要求有入栈和出栈功能谢谢 -
承邢格岚: #include "stdio.h"#define MAXLEN 100typedef struct stacknode{ int data; struct stacknode *next;}stacknode;typedef struct{ stacknode *top;}linkstack;...

如东县17556394715: c语言计算器程序源代码 -
承邢格岚: 栈操作~ 输入的弄成字符串. 如:a+(b+c*(d+e)) 先检索“(”入栈,b入栈,+入栈,c入栈,*入栈,后面的不是数字那么“(”入栈,+,入栈,e入栈, “)”入栈,遇到“)”,出栈操作,直到遇到第一个“(”. 得到字符:d+e,通过算法计算出...

如东县17556394715: 求助入栈和退栈的C语言算法 -
承邢格岚: #include #define MAXN 10000 int s[MAXN];int num = 0;//记录栈内元素个数 void pop()//退栈{ num--; return s[num+1];} void push(int n)//入栈{ num++; s[num]=n;} main(){ return 0;}

如东县17556394715: C语言入队出队,入栈出栈.程序是同学给的,运行不出来.哪位大神帮忙看看,有代码的话给我发一个.谢了 -
承邢格岚: 堆栈原则上是先进后出,出栈是不需要参数的,另外GetQueue()也是一样的,这两个函数只会对栈顶操作.入栈也是默认压入栈顶的.至于代码,查看库函数Stack.h参考一下

如东县17556394715: 数据结构 用C语言编程实现进栈出栈 -
承邢格岚: 希望如下对你有用:/*栈的基本操作*/# define stacksize 100 /*定义栈的最大存储空间*/# define LEN sizeof(struct stack) static size=0; struct stack { int data; int *top[stacksize]; }; struct stack *sqstack; struct stack *s; static e; int push() /*将元素压入...

如东县17556394715: 用C语言实现入栈出栈大神们帮帮忙 -
承邢格岚: #include int stack[100]; /*100个栈空间*/ int* sp = stack; /*栈指针指向栈底*/ #define push( i ) { *sp++ = i; } /*push一个数*/ #define pop() (*--sp) /*pop一个数并返回*/ int main() { int i; for ( i = 0; i < 10; ++i )/*push 0~9*/ push( i ); for ( i = 0; i < 10; ++i )/*输出9~0*/ printf( "%d ", pop() ) ; }

如东县17556394715: 用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)....

如东县17556394715: 编写一个C源程序,其中包含顺序表示的空栈的创建、判断栈是否为空、进栈、出栈、取栈顶元素等操作. -
承邢格岚: 1,如何断栈是否为空: C# 中 Stack 类的Count 属性 返回就是堆栈的长度. System.Collections.Stack stack = new System.Collections.Stack(); stack.push( "1" ); if( 0==stack.Count ) MessageBox.Show("堆栈为空."); else ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网