c语言数组实现栈(用C语言实现栈的基本操作(数制的转换))

:暂无数据 2026-06-25 19:50:01 :0

c语言数组实现栈(用C语言实现栈的基本操作(数制的转换))

大家好,今天小编来为大家解答以下的问题,关于c语言数组实现栈,用C语言实现栈的基本操作(数制的转换)这个很多人还不知道,现在让我们一起来看看吧!

本文目录

用C语言实现栈的基本操作(数制的转换)

//顺序栈以及基本操作如下:

#include《iostream.h》
enum
{
MAX_SIZE=20
};
typedef struct
{
int* base;
int* top;
int stacksize;
}SqStack;
void InitStack(SqStack& S)
{
S.base=new int;
S.top=S.base;
S.stacksize=MAX_SIZE;
}
bool Push(SqStack& S,int e)
{
if(S.top-S.base》=S.stacksize)
return false;
*S.top=e;
S.top++;
return true;
}
bool Pop(SqStack& S,int& e)
{
if(S.top==S.base)
return false;
S.top--;
e=*S.top;
return true;
}
void DestroyStack(SqStack& S)
{
if(S.base)
delete S.base;
S.top=S.base=NULL;
S.stacksize=0;
}
bool StackEmpty(SqStack S)
{
return (S.top==S.base);
}
void Print(SqStack S)
{
int i=0;

while(i《S.top-S.base)
{

cout《《S.base《《endl;
}
}

用C语言实现栈的操作,包括创建空栈,PUSH,和POP用标准C,就是能在TC上运行的

#include 《stdio.h》
#include 《stdlib.h》
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SElemtype;
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);
int main()
{
SElemtype e, f = 0, g = 0;
int c;
SqStack S;
if (!InitStack(S))
return 0;
printf("栈已初始化好,输入一个数据入栈.\n");
scanf("%c", &e);
if (!Push(S, e))
return 0;
if (!GetTop(S, f))
return 0;
printf("栈顶元素是:%c\n", f);
if (!Pop(S, g))
return 0;
printf("栈顶元素出栈,它是:%c\n", g);
scanf("%d", &c);
return 1;
}
int InitStack(SqStack &S)
{
S.base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof (SElemtype));
if (!S.base)
return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
int 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)
return 0;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
int GetTop(SqStack S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *(S.top - 1);
return 1;
}
int Pop(SqStack &S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *--S.top;
return 1;
}
我学这本书时写的,刚好给你。
针对补充问题:
&不是伪代码,是C++的传引用,你看的那本书上都是这样用的。
楼上的顺序栈实质就是一个数组。。
TC不能建C++项目吗? 不能的话你还是装个VC吧,你若听了老师的话就应该知道在这里传引用是什么意思,且看下面:
int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);
有没有发现GetTop()的参数没有使用&S,因为它对S只读,不改变S。
如果不使用传引用的话,那么InitStack(),Push()等将要返回一个S,若要保存还要把它赋给另一个SqStack类型的变量S1,这样做浪费时间还浪费空间,且之前的S也就没用了,如果反复地调用Push()的话,这样的浪费可想而知。
所以,为了节省时间跟空间,以及按大多数情况下的需要,我们还是得始终只用一个S保存我们要的数据。
至于传引用是什么意思,跟指针有点像,你若不想翻书就再补充问题吧。。

c语言编写,用数组表示栈,不用指针,编写gettop函数(取栈顶元素)

int top;//要求栈顶为全局变量
int gettop(int a)
{
int e;
if(top == -1)//top=-1视为栈空.视具体情况分析,也可以top==0
{
printf("栈空\n");
}

e=a;//取值
top--; //栈顶自减
return e;
}
-》是指针变量对结构成员的调用等同 点符号.

数据结构(C语言)两个栈共存储在一个长度为n的一维数组中

想法是stack1,stack2的base分别在数组的两端。
stack1每次push的时候top + 1,stack2每次push时top-1,
初始时top1=base1,top2=base2,判断是否用空余空间可以用stack1.top 》 stack2.top
pop操作相反,判断栈空可以用stack.base == stack.top

C语言中如何用栈存储多个二维数组

typedef struct{
int left_pos; //左边栈顶,靠0方向
int right_pos; //右边栈顶,靠MAXSIZE-1方向
int split_pos; //左右栈分割位置
int stack;
}DoubleStack;
初始的时候,为了能够高效方便的让2个栈进数据,建议把split_pos设置为MAXSIZE/2,也即中间,并初始化 left_pos,right_pos也为MAXSIZE/2;typedef struct{
int left_pos; //左边栈顶,靠0方向
int right_pos; //右边栈顶,靠MAXSIZE-1方向
int split_pos; //左右栈分割位置
int stack;
}DoubleStack;
初始的时候,为了能够高效方便的让2个栈进数据,建议把split_pos设置为MAXSIZE/2,也即中间,并初始化 left_pos,right_pos也为MAXSIZE/2;

建立顺序存储的栈,并对之进行入栈、出栈、取栈顶元素操作的c语言算法

#include "process.h"
#include "stdio.h"
#include "assert.h"
const int stackIncreament=20; //栈溢出时扩展空间的增量
class SeqStack
{
private:
int top; //栈顶指针
int MAX; //栈的最大可容纳个数
int *elements; //存放栈中元素的栈数组
void overflowProcess(); //栈的溢出处理
public:
SeqStack(int sz=50); //构造函数
~SeqStack() { deleteelements; } //析构函数
bool pop1(int & x); //元素出栈
void push1(const int & x); //新元素进栈
bool IsEmpty1()const; //判断栈空与否
bool IsFull1()const; //判断栈满与否
void output1(); //输出元素进栈顺序
void output(int x); //输出x
};
SeqStack::SeqStack(int sz):top(-1),MAX(sz)
{
elements=new int; //创建栈的数组空间
assert(elements!=NULL); //断言:动态存储分配成功与否
}
bool SeqStack::pop1(int & x) //栈顶元素出栈
{
if(IsEmpty1()==true) return false;//判栈空否,若栈空则函数返回
x=elements; //栈顶指针退1
return true; //退栈成功
}
void SeqStack::push1(const int & x) //新元素进栈
{
if(IsFull1()==true) overflowProcess(); //栈满则溢出处理
elements=x; //栈顶指针先加1,再进栈
}
bool SeqStack::IsEmpty1() const //判断栈空与否
{
return (top==-1)?true:false;
}
bool SeqStack::IsFull1()const //判断栈满与否
{
return (top==MAX-1)?true:false;
}
void SeqStack::overflowProcess() //栈的溢出处理
{
//私有函数,扩充栈的存储空间。
int *Array=new int; //和课本不一样 ??????????
if(Array==NULL)
{
printf("存贮分配失败 ! \n");
exit(1);
}
for(int i=0;i《=top;i++) Array;
MAX=MAX+stackIncreament;
delete elements;
//elements=Array;
}
void SeqStack::output1() //元素入栈顺序输出
{
int n=0;
int t=top;
for(int i=0;i《top;i++)
{
printf(" %d",elements);
n++;
if(n%10==0)
printf("\n");
}
}
void SeqStack::output(int x) //栈内元素输出
{
printf(" %d",x);
}
//----------------------顺序栈函数--------------------------//
void SeqStack1( SeqStack A)
{
int x=-1;
int X;
printf("请输入要入栈A的元素值,以0结束:\n");
while(x!=0){ //新元素进栈
scanf("%d",&x);
A.push1(x);
}
printf("\n元素进栈顺序是 :");
A.output1();
printf("\n\n");
A.pop1(X); //元素出栈
if(!A.pop1(X))
printf("元素出栈失败 !\n");
else
{
printf("\n栈顶元素是: ");
A.output(X);
printf("\n");
printf("\n元素出栈的结果是 : ");
A.output(X);
while(A.pop1(X))
A.output(X);
}
}
void main()
{
printf("----------顺序栈的调试----------\n");
printf("\n \n");
SeqStack A;
SeqStack1(A);
printf("\n \n");
}

c语言写一个数组栈

#include 《stdio.h》
#include 《stdlib.h》
#define Size 20
typedef char ElementType;
typedef struct
{
    ElementType    data;
    int top;
}Stack;    
int  StackFull(Stack *s)
{
    return (s-》top==Size-1);
}
void PushStack(Stack *s, char *buf)
{
    if(NULL==s || NULL==buf)
        return;
    while( *buf!=’\0’ && *buf!=’^’ && !StackFull(s))
    {
        if(*buf != ’ ’)
            s-》data = *buf;
        ++buf;    
    }
}
void PopStack(Stack *s)
{
    if(NULL == s)
        return;
    while(s-》top != -1)
        putchar(s-》data);
}
int main()
{
    char str;
    Stack *s = (Stack*)malloc(sizeof(Stack));
    s-》top = -1;
    
    gets(str);
    PushStack(s, str);
    PopStack(s);
                  
    return 0;
}

数据结构定义一个栈并实现入栈和出栈操作的程序c语言完整版

如下:

#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\n");
     scanf("%d",&choice);
     while(choice!=3)
     {
          switch(choice)
          {
               case 1:
               printf("please input an integer!\n");
               scanf("%d",&item);
               //printf("%d\n",item);
               push(&sPtr,item);
               printStack(sPtr);
               break;
               case 2:
               if(!isEmpty(sPtr))
               {
                    printf("deleting element of top stack\n");
                    pop(&sPtr);
                    printStack(sPtr);
               }
               else{
                    printf("no element in the stack\n");
               }
               break;
               default:
                    printf("invalid input,check your input!\n");
                    break;
          }
          printf("pleace choose your choice ");
          instruct();
          scanf("%d",&choice);
     }
}
void instruct()
{
     printf("Following the instruction below:\n"
            "1:insert new elment into the stack\n"
            "2:delete the top element of the stack\n"
            "3:to end of run\n");
}
int isEmpty(STACKNODEPTR sPtr)
{
     return sPtr==NULL;
}
void printStack(STACKNODEPTR sPtr)
{
     if(sPtr==NULL)
     {
          printf("The stack is empty!\n");
     }
     else{
          printf("The elements of the stack:\n");
          while(sPtr!=NULL)
          {
               printf("%d--》",sPtr-》data);
               sPtr=sPtr-》nextPtr;
          }
          printf("NULL\n\n");
     }
}
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\n");
     }
}
int pop(STACKNODEPTR *topPtr)
{
     STACKNODEPTR newPtr;
     int topValue;
     newPtr=*topPtr;
     *topPtr=(*topPtr)-》nextPtr;
     free(newPtr);
     topValue=(*topPtr)-》data;
     printf("deleting--- %d\n",topValue);
     return topValue;
}

数据结构:

是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

常用数据结构:

数组 (Array)、栈 (Stack)、队列 (Queue)、链表 (Linked List)、树 (Tree)、图 (Graph)、堆 (Heap)、散列表 (Hash)

c语言 为什么栈的初始化时候栈顶指针要指向-1

这种初始化是用于线性栈的,也就是用一个数组来组成栈,栈顶指针值为当前栈顶元素的下标值。
当有数据入栈时,会先执行栈顶指针自加。
初始化为空栈,
规定空栈的时候指向-1,这样在有第一个元素入栈的时候栈顶指针就可以通过自加指向0元素,从而避免其它判断。

关于c语言数组实现栈到此分享完毕,希望能帮助到您。

c语言数组实现栈(用C语言实现栈的基本操作(数制的转换))

本文编辑:admin

更多文章:


teammate(teammate,company,partner)

teammate(teammate,company,partner)

各位老铁们,大家好,今天由我来为大家分享teammate,以及teammate,company,partner的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧

2026年10月11日 06:10

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

其实javascript arraybuffer的问题并不复杂,但是又很多的朋友都不太了解javascript可以把base64编码转换成二进制代码吗求示例代码!,因此呢,今天小编就来为大家分享javascript arraybuffer的

2026年10月11日 04:00

text函数公式(excel中round和text函数的区别是什么)

text函数公式(excel中round和text函数的区别是什么)

“text函数公式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看text函数公式(excel中round和text函数的区别是什么)!

2026年10月11日 03:50

pascal编程软件(介绍一下pascal语言!)

pascal编程软件(介绍一下pascal语言!)

大家好,如果您还对pascal编程软件不太了解,没有关系,今天就由本站为大家分享pascal编程软件的知识,包括介绍一下pascal语言!的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 02:40

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

本篇文章给大家谈谈google chrome打不开,以及chrome浏览器打不开怎么回事 浏览器打不开的处理方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了

2026年10月11日 02:00

websocket整合springboot(Springboot整合Websocket遇到的坑)

websocket整合springboot(Springboot整合Websocket遇到的坑)

大家好,websocket整合springboot相信很多的网友都不是很明白,包括Springboot整合Websocket遇到的坑也是一样,不过没有关系,接下来就来为大家分享关于websocket整合springboot和Springbo

2026年10月11日 01:40

小米官方首爆miui14(miui14耗电严重官方回应)

小米官方首爆miui14(miui14耗电严重官方回应)

各位老铁们好,相信很多人对小米官方首爆miui14都不是特别的了解,因此呢,今天就来为大家分享下关于小米官方首爆miui14以及miui14耗电严重官方回应的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 00:40

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

本篇文章给大家谈谈drawerlayout,以及android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月10日 19:20

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

大家好,今天小编来为大家解答以下的问题,关于xor四位数怎么运算,单片机怎样用C语言实现4个数字间的异或这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 17:50

perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)

perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)

其实perl数组中最多的元素的问题并不复杂,但是又很多的朋友都不太了解用perl实现,得到一个数组中重复次数最多的元素,因此呢,今天小编就来为大家分享perl数组中最多的元素的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧

2026年10月10日 17:00

最近更新

frontpage的主要功能(frontpage是什么)
2026-10-11 08:40:18 浏览:0
ideapad15alc7能玩什么游戏(联想ideapad15可以玩刺客信条启示录吗)
2026-10-11 08:10:05 浏览:0
me是国内域名吗(me域名的概况)
2026-10-11 07:50:35 浏览:0
vivoiqoo9发布会(vivoiqoo9pro什么时候上市)
2026-10-11 07:20:22 浏览:0
热门文章

打印机m7400(m7400打印机清零方法)
2026-08-29 07:50:01 浏览:5
acrobat各版本区别(Acrobat XI Pro与 Acrobat PRO DC什么区别)
2026-08-29 22:30:20 浏览:2
联想y510p怎么升级(联想y510p换cpu)
2026-08-17 03:30:04 浏览:2
标签列表