精华内容
下载资源
问答
  • C语言栈的使用

    千次阅读 2017-08-30 18:26:57
    #include #include   #define N 10   typedef struct _Stack  ...//记录中有多少个元素,后面data[top]表示栈顶  int data[N]; }stack;   stack mystack= { -1,{0} };//-1代表中没有元素,{0}将

    1.顺序存储结构

    #include<stdio.h>  

    #include<stdlib.h>  
      
    #define N 10  
      
    typedef struct _Stack 
    {  
        int top;//记录栈中有多少个元素,后面的data[top]表示栈顶  
        int data[N];  
    }stack;  
      
    stack mystack= { -1,{0} };//-1代表栈中没有元素,{0}将数组全部初始化为0  
    /*
    判断栈是否为空,主要看stack中top的值,初始化时是一个空栈,top=-1 
    返回值:为1表示空栈,为0表示不是空栈 
    */ 
    int isempty() 
    {  
        if(mystack.top==-1) 
    {  
            return 1;  
        } 
    else 
    {  
            return 0;  
        }  
    }  
    //设置栈为空  
    void setempty() 
    {  
        mystack.top=-1;  
    }  
    /*
    压入一个数据,成功返回1,失败返回0(栈溢出)
    在入栈之前需要判断会不会导致栈溢出  
    */ 
    int push(int data) 
    {  
        if(mystack.top+1<=N-1)
        {  
            mystack.data[++mystack.top]=data;  
            return 1;  
        } 
    else 
    {  
            return 0;  
        }  
    }  
    /*
    出栈,首先要判断是否为空栈,如果为空直接返回
    不为空,从栈顶返回一个元素
    */ 
    int pop() 
    {  
        if(isempty()) 
    {  
            return -1;//为空,返回-1   
        } 
    else 
    {  
            return mystack.data[mystack.top--];  
        }  
      
    }   
    int  main()
    {  
      int a[10]; 
      int i=0; 
      for(i=0;i<10;i++)
      {  
          a[i]=i;  
      }  
      for(i=0;i<10;i++)
      {  
          push(a[i]);//压人数据   
      }  
      while(isempty()!=1)
      {  
        printf("%d\n",pop());  
      }   
        return 0; 

    }  


    2.链式存储结构

    #include "stdafx.h"
    #include <iostream>
    #include <exception>
    using namespace std;


    //栈的链式存储结构及实现
    //栈的结构定义
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    typedef int sElemType;
    typedef int Status;




    typedef struct StackNode
    {
        sElemType data;
        struct StackNode *next;
    }StackNode,*LinkStackPtr;


    typedef struct LinkStack
    {
        LinkStackPtr top;
        int count;
    }linkStack;


    //栈空
    Status StackEmpty(LinkStack *S)
    {
        if(S->count == 0)
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }


    }
    //入栈
    Status Push(LinkStack *S,sElemType e)
    {
        LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
        s->data = e;
        s->next = S->top;
        S->top = s;
        S->count++;
        return OK;
    }
    //出栈
    Status Pop(LinkStack *S,sElemType *e)
    {
        if(StackEmpty(S))
        {
            cout<<"栈空"<<endl;
            return ERROR;
        }
        LinkStackPtr p = S->top;
        S->top = p->next;
        *e = p->data;
        free(p);
        S->count--;
        return OK;
    }




    int _tmain(int argc, _TCHAR* argv[])
    {
        int pushElem = 2;
        linkStack *linkSt=(linkStack*)malloc(sizeof(LinkStack));
        linkSt->count=0;
        Push(linkSt,pushElem);//将2入栈
        pushElem = 3;
        Push(linkSt,pushElem);//将3入栈
        int popElem = 0;
        Pop(linkSt,&popElem);//出栈,结果输出给popElem
        cout<<popElem<<endl;//输出 出栈的元素
        Pop(linkSt,&popElem);//出栈,结果输出给popElem
        cout<<popElem<<endl;//输出 出栈的元素
        Pop(linkSt,&popElem);//出栈,没有元素了.栈空
        return 0 ;
    }

    展开全文
  • linux下C语言栈的使用

    2011-05-16 21:40:00
    栈的基本操作为:创建栈(NewStack),判断栈是否为空(IsEmpty),判断栈是否满(IsFull),获取栈顶元素(Top),压栈/入栈(Push),弹栈/出栈(Pop). 栈的存储方式有多种,其中,采用链式栈存储结构实现可不必连续存储,...

           栈结构是计算机语言实现中的一种重要的数据结构,对于任意栈,进行插入和删除操作的一端称为栈顶,而另一端成为栈底。栈的基本操作为:创建栈(NewStack),判断栈是否为空(IsEmpty),判断栈是否满(IsFull),获取栈顶元素(Top),压栈/入栈(Push),弹栈/出栈(Pop).

           栈的存储方式有多种,其中,采用链式栈存储结构实现可不必连续存储,以下为C代码采用链式栈实现一个整数栈操作(vim stack1.c):

    1 #include <stdio.h>
    2 #include <malloc.h>
    3
    4 typedef struct List {
    5 int data; /*栈数据*/
    6 struct List *next; /*上次入栈的数据地址*/
    7 }dList;
    8
    9 typedef struct Stack {
    10 dList *pTop; /*当前栈顶指针*/
    11 }dStack;
    12
    13 dStack *NewStack() {return (dStack*)calloc(1,sizeof(dStack));}
    14
    15  int IsEmpty(dStack *S) { /*判断栈S是否为空栈*/
    16 if(!S||!S->pTop) return 1;
    17 return 0;
    18 }
    19
    20  int Top(dStack *S) {
    21 if (IsEmpty(S)) return -10000;
    22 return S->pTop->data;
    23 }
    24
    25  void Push(dStack *S,int theData) { /*将数据theData压栈*/
    26 dList *newNode;
    27 newNode=(dList*)calloc(1,sizeof(dList));
    28 newNode->data=theData;
    29 newNode->next=S->pTop;
    30 S->pTop=newNode;
    31 }
    32
    33 void Pop(dStack *S) { /*弹栈*/
    34 dList *lastTop;
    35 if (IsEmpty(S)) return;
    36 lastTop=S->pTop;
    37 S->pTop=S->pTop->next;
    38 free(lastTop);
    39 }
    40
    41 #define MD(a) a<<2
    42 int main()
    43 {
    44 int i;
    45 dStack *myStack;
    46 myStack=NewStack();
    47 Push(myStack,MD(1));
    48 Push(myStack,MD(2));
    49 Pop(myStack);
    50 Push(myStack,MD(3)+1);
    51 while (!IsEmpty(myStack)) {
    52 printf("%d ",Top(myStack));
    53 Pop(myStack);
    54 }
    55 printf("\n");
    56 return 0;
    57 }

    编译gcc -Wall -o stack1  stack1.c

    然后运行得

    24 4

    注意:

    在linux的C环境中,不支持

    Stack* myStack语法,也不支持

    typedef struct Stack {

        ......

    } Stack;

    这会被认为循环定义。

    转载于:https://www.cnblogs.com/djcsch2001/archive/2011/05/16/2048112.html

    展开全文
  • 栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那...其实在程序员无时无刻不在运用栈,函数的调用是我们间接使用栈的最好例子,因此可以说栈的一个最重要的运用就是函数的调用。
  • C语言栈的用法(创建、入栈、出栈、遍历)

    万次阅读 多人点赞 2019-03-16 14:35:47
    C语言栈的用法(创建、入栈、出栈、遍历) 本篇博客主要简单介绍如何使用C语言构建栈,元素入栈,元素出栈以及遍历所有的栈内元素 1、栈的定义 首先对栈进行定义,构建一个简单的结构体,采用typedef struct 的类型...

    C语言栈的用法(创建、入栈、出栈、遍历)

    本篇博客主要简单介绍如何使用C语言构建栈,元素入栈,元素出栈以及遍历所有的栈内元素

    1、栈的定义

    首先对栈进行定义,构建一个简单的结构体,采用typedef struct 的类型,然后包含栈顶、栈底和栈内元素三个部分

    typedef struct{
    	char data[100];
    	int top;
    	int bottom;
    }stack;
    

    上述代码表示构建一个名字是stack类型的结构体,包含三个部分。

    2、栈的创建

    然后是栈的构建,来为栈开辟内存空间,存储我们进行入站出栈的元素。只需在栈操作开始前进行一次栈的构建即可,无需重复。

    stack *StackCreate(){
    	stack *p=(stack*)malloc(sizeof(stack));//分配新空间 
    	if(p==NULL)//分配失败 
    	return 0;
    	p->bottom=p->top=0;//分配成功 
    	return p;
    }
    

    上述代码段为向p内分配内存,成功则返回p

    3、入栈

    栈构建完毕后就开始进行栈的操作了,首先就是如何将字符、数字等我们想要的内容送入栈中,就需要进行入栈操作。

    void StackInput(stack *p,char str){
    	p->data[p->top]=str;//存入栈中 
    	p->top++;//栈顶指针加1 
    } 
    

    将字符str存入栈中,位置为top,只存在data中,然后栈top++

    4、出栈

    当我们想要栈顶的元素时,就用到了出栈的操作

    char StackOutput(stack *p,char str){
    	if(p->top!=p->bottom){//栈非空 
    		str=p->data[p->top-1];//栈顶内容输出 
    		p->top--;//栈顶减1 
    		return str;
    	}
    } 
    

    因为top位置为栈顶值的下一个,因此将data中top-1的值输出,栈顶top–,返回的值为栈顶元素str

    5、栈的遍历

    但我们想要输出栈内存储的所有元素,那么就需要使用到遍历

    void StackPrint(stack *p){
    	while(p->top!=p->bottom){
    		printf("%c",p->data[p->top-1]);
    		p->top--;
    	}
    }
    

    从栈顶元素开始,直到top==bottom为止,输出其中data存储的元素值

    6、例子

    下面我们简单看一下压入一个字符和压入字符串的情况

    int main(){
    	char str;
    	stack *p;//定义栈名 
    	p=StackCreate();//创建栈 	
    	StackInput(p,'b');//将字符压入栈中 
    	str=StackOutput(p,str);//取出栈顶内容 
    	printf("%c\n",str);//输出栈顶内容 
    }
    

    将字符b压入栈中,然后从栈中输出
    在这里插入图片描述

    int main(){
    	int i;
    	stack *p;//定义栈名 
    	char a[10]="asdfgh";
    	p=StackCreate();//创建栈 	 
    	for(i=0;i<strlen(a);i++)//将字符串a的字符入栈 
    	StackInput(p,a[i]);
    	printf("输出栈中所有字符:\n"); 
    	StackPrint(p);
    }
    

    在这里插入图片描述

    7、源代码

    给出完整的字符串的栈操作源代码,已经过编译,无BUG

    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    
    //定义栈 
    typedef struct{
    	char data[100];
    	int top;
    	int bottom;
    }stack;
    
    //创建栈
    stack *StackCreate(){
    	stack *p=(stack*)malloc(sizeof(stack));//分配新空间 
    	if(p==NULL)//分配失败 
    	return 0;
    	p->bottom=p->top=0;//分配成功 
    	return p;
    }
    
    //入栈
    void StackInput(stack *p,char str){
    	p->data[p->top]=str;//存入栈中 
    	p->top++;//栈顶指针加1 
    } 
    
    //出栈 
    char StackOutput(stack *p,char str){
    	if(p->top!=p->bottom){//栈非空 
    		str=p->data[p->top-1];//栈顶内容输出 
    		p->top--;//栈顶减1 
    		return str;
    	}
    } 
    
    //输出 
    void StackPrint(stack *p){
    	while(p->top!=p->bottom){
    		printf("%c",p->data[p->top-1]);
    		p->top--;
    	}
    }
    
    //主函数 
    int main(){
    	int i;
    	stack *p;//定义栈名 
    	char a[10]="asdfgh";
    	p=StackCreate();//创建栈 	 
    	for(i=0;i<strlen(a);i++)//将字符串a的字符入栈 
    	StackInput(p,a[i]);
    	printf("输出栈中所有字符:\n"); 
    	StackPrint(p);
    }
    
    
    

    在这里插入图片描述
    大家还有任何疑问,请留言,谢谢。

    展开全文
  • C语言栈的使用

    千次阅读 2011-11-30 11:58:47
    以前不是很熟悉C语言栈的使用,只知道是栈是从高地址到低地址增长,但是下面这个程序确实让人咋舌。 程序如下: #include #include int main() {  char a[] = "123456789";  char b[] = "1234"; ...
    以前不是很熟悉C语言中栈的使用,只知道是栈是从高地址到低地址增长,但是下面这个程序确实让人咋舌。
    程序如下:

    #include <string.h>
    #include <stdio.h>

    int main()
    {
        char a[] = "123456789";
        char b[] = "1234";

        strcpy(b, a);

        printf("b = %s  a = %s\n", b, a);

        return 
    }

    执行结果:
    b = 123456789   a = 6789

    确实很神奇怪,之后经过一番分析,发现程序的栈使用情况如下:

    C语言中栈的使用 - vanpire110 - vanpire110的博客
     
     
    故打印情况如上所示。

    再来一个程序:

    #include <string.h>
    #include <stdio.h>

    int main()
    {
        char a[] = "123456789";
        char c[] = "aaaaaaaaaaaaaaaaaaaa";
        char b[] = "1234";

        strcpy(b, a);
        
       // printf("%x   %x   %x\n", a, c, b);                         //   %x   这些是地址打印情况
       // printf("%x   %x   %x\n", &a[0], &c[0], &b[0]);
       // printf("%x   %x   %x\n", &a[8], &c[19], &b[4]);
       // printf("%c   %c   %c\n", a[0], c[0], b[0]);
       // printf("%c   %c   %c\n", a[8], c[19], b[4]);
        printf("b = %s  a = %s  c = %s\n", b, a, c);
        
        return 0;
    }

    执行情况如下:

    C语言中栈的使用 - vanpire110 - vanpire110的博客
     
    这次栈的使用情况如下:
    C语言中栈的使用 - vanpire110 - vanpire110的博客
     
    C打印出6789是因为被b覆盖导致的,而字符串的输出是碰到\0就结束的,故原因在此。
    展开全文
  • <p>//顺序栈的存储结构 typedef struct {<!-- -->  SElemType *base;  SElemType *top;  int stacksize; //可用最大容量 }SqStack; <p>//初始化 void InitStack...
  • C语言 顺序栈的使用

    千次阅读 2011-12-06 18:04:40
    //顺序栈的使用 //作者:nuaazdh //时间:2011年12月5日 #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 ...
  • 下面小编就为大家带来一篇使用C语言判断栈的方向实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
  • c语言 和队列实现

    千次阅读 2018-08-14 22:22:10
    一般而言,我们使用顺序表(数组)形式建立 这一数据结构。   (stack)又名堆栈,它是一种运算受限线性表。其限制是仅允许在表一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为底...
  • C语言中堆和栈的使用

    2020-08-03 17:33:19
    本文介绍了C语言中堆和之间区别、使用等内容。
  • 栈的应用欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表...
  • 4、会溢出特点。 堆: 同样也是脏内存、可以反复使用、临时性。 注意是:堆使用要在malloc和free之间,在此之间不能赋值其他值,有可能吃内存。 malloc(x)时 x<16时都会申请16个字节。 int p =(intp)malloc...
  • 文章目录思想链式数组参考书籍 思想 思想: 1、模型:基本操作有Push(入栈)和Pop(出栈),元素符合先进后出...3、数组:首先我们可以直接使用数组(array)构造,利用top(初始化为-1),元素进栈则top+1,arr...
  • 我们在做课程作业时候,每次都会用到各种...仔细想了一下,实际上用户层程序若要使用一个,那么用户层代码必定知道在元素应该是什么数据结构,c语言好像不能像c++一样把数据类型当做一个参数在函数之
  • 内容为整数和小数四则运算,用C语言实现使用结构。可以实现+-*/和()运算,现在分享给大家!
  • c语言栈写进制转换

    2020-03-31 20:36:55
    使用栈完成十进制向任意进制转换
  • 备考期间写树类数据结构相关基本算法的C语言实现,为以后使用方便,现记录如下:全局定义和依赖:#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define elemType int #define ERROR 0 #...
  • 为了简单说明栈的特性以及使用情景,我搬了一道LeetCode算法题过来: 算法-20.有效的括号 给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同...
  • 代码分为4部分test.c. head.h list.c Makefile list.c #include"head.h" //创建一个空栈 sqstack stack_create(int len) { sqstack p; p=(sqstack)malloc(sizeof(Lnode)); if(p==NULL) { printf("p ...
  • C语言 顺序栈使用之括号匹配

    千次阅读 2011-12-10 19:45:46
    //顺序栈的使用举例:括号的匹配 //作者:nuaazdh //时间:2011年12月5日 #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 #define ...
  • 建立四个栈,分别按字符串字符先后顺序入栈大数的整数部分和小数部分,然后先计算小数部分的,由于小数部分是高位对齐,因此一直出栈最长小数栈的字符并进入小数结果的栈,小数位数对齐后,两个小数栈出栈...
  • 主要介绍了C语言用栈和队列实现回文检测功能,结合具体实例形式分析了C语言栈和队列定义及使用栈和队列进行回文检测操作技巧,需要朋友可以参考下
  • 使用C语言判断栈的方向

    千次阅读 2014-07-29 14:58:41
    这一问题主要是如何判读出先后入栈变量地址大小,比如有a, b两个变量一先一后被定义,如果a地址大于b地址,则说明是以低地址方向增长,反之,往高地址方向增长。
  • C语言函数

    千次阅读 2016-12-26 22:15:46
    C语言的函数栈c语言的中,栈的使用是无处不在的,在函数的调用过程中,函数的调用同样也是离不开栈的,它使用栈来保存信息的。主调函数与被调函数函数栈的调度流程首先我们来了解下主调函数和被调函数: 一个函数...
  • 主要介绍了C语言数据结构之使用链表模拟栈的实例的相关资料,需要的朋友可以参考下
  • C语言

    2021-06-05 18:30:55
    使用宏可以实现最简单的栈,定义如下: #define create_stack(buf) ((buf)-1) #define push(stackp, value) (*(++(stackp)) = (value)) #define pop(stackp) (*((stackp)--)) #define peek(ptr) (*(ptr)) 使用示例...
  • C语言使用栈和队列来判断回文

    千次阅读 2019-11-28 20:42:27
    C语言使用栈和队列来判断回文 算法思想 使用栈和队列来分别接受输入字符串,利用先进后出,队列先进先出特点进行前后比较来判断是否是回文 你可以使用双端队列更好解决问题。 使用数组话,代码又长又不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,586
精华内容 1,034
关键字:

c语言栈的使用

c语言 订阅