zoukankan      html  css  js  c++  java
  • 数据结构 实验二 栈

    数据结构 实验二  栈

    首先,头文件与实验一相同,这里就不再赘述。可以参考实验一的头文件。

    栈操作的相关实验代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /*包含数据结构的预定义常量和类型P10 */
    #include "DataHead.h"
    /*文件名大于8位出错*/
    
    /*定义元素类型为整数类型*/
    typedef int SElemType;
    
    /*栈的顺序存储表示*/
    #define STACK_INIT_SIZE 4      /*  p46 */
    
    #define STACKINCREMENT 1
    
    typedef struct{
        SElemType *base;
        SElemType *top;
        int       stacksize;
    }SqStack;
    
    /*函数申明*/
    Status InitStack(SqStack *L);   /*  p47 */
    Status GetTop(SqStack S,SElemType *e);
    Status Push(SqStack *L, SElemType e);   /* 进栈,插入 */
    Status Pop(SqStack *L, SElemType *e);   /*  出栈,删除*/
    void Out_Stack(SqStack L);    /*补充,输出打印栈*/
    
    /*主函数*/
    void main()
    {
     int i,k,loc;     /* k ,菜单控制变量*/
     SElemType e,x;
     char ch;
     SqStack L;
     SqStack *p;
     system("graftabl 936");/*调用MS_DOS中文支持*/
     p=&L;/*p指向 L*/
     do{
    
        printf("
    
    
    ========实验二:栈和队列 ===============");
        printf("
            1.建立栈:构造一个空栈,并插入元素");
        printf("
            2.入栈,插入元素");
        printf("
            3.出栈,删除元素");
        printf("
            4.取栈顶元素");
        printf("
            5.输出显示栈内元素,从栈底到栈顶");
        printf("
            0.结束程序运行");
        printf("
    =====================================");
        printf("
            请输入您的选择(1,2,3,4,0)
    ");
    
        scanf("%d",&k);
        switch(k)
        {
         case 1:{loc=InitStack(p);
                printf("
    请输入入栈元素个数,并依次输入整数类型的元素值");
                scanf("%d",&loc);
                for(i=1;i<=loc;i++) {
                   scanf("%d",&e);
                   Push(p, e);  /*也可以不处理函数返回值*/
                   }
                Out_Stack(L);
                }break;
         case 2:{ 
             printf("
    请输入入栈元素的值:");
             scanf("%d", &e);
             Push(p,e);
             Out_Stack(L);
                }break;
         case 3:
             { 
                 printf("
    请输入出栈元素个数");
                 while(true)
                 {
                     scanf("%d", &loc);
                     if(loc > p->top-p->base)
                         printf("
    !!出栈元素个数大于栈内所有元素个数!请重新输入!
    ");
                     else
                         break;
                 }
                 printf("
    出栈元素为: ");
                 for(i = 1; i <= loc; i++)
                 {
                     Pop(p, &e);
                     printf("%8d ", e);
                 }
                 Out_Stack(L);
             }break;
         case 4:
             {
                 GetTop(L, &e);
                 printf("当前栈顶元素为: %d", e);
             }; break;
         case 5:{Out_Stack(L);
                }; break;
         case 0:{exit(0);}
        }
      }while(k!=0);
      ch =getchar();
    }
    
    
    
    
    Status InitStack(SqStack *S) {  /*  p47 */
      /*  构造一个空栈 */
      S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
      if (!S->base) exit(OVERFLOW);        /*  存储分配失败 */
      S->top = S->base;
      S->stacksize = STACK_INIT_SIZE;   /*  初始存储容量 */
      return OK;
    } /*  InitStack */
    
    Status GetTop(SqStack S, SElemType *e) {  /*  p47 */
        if(S.base == S.top)        return ERROR;
        e = S.top - 1;
        return OK;
    } /*  GetTop */
    
     
    Status Push(SqStack *S, SElemType e) {  /*  P47 */
    
      if (S->top-S->base >= S->stacksize) {   /*  当前存储空间已满,增加容量 */
        S->base = (SElemType *)realloc(S->base,
                      (S->stacksize+STACKINCREMENT)*sizeof (SElemType));
        if (!S->base) exit(OVERFLOW);   /*  存储分配失败 */
        S->top = S->base+S->stacksize;
        S->stacksize += STACKINCREMENT;  /*  增加存储容量 */
      }
      *S->top++ = e;       /* 个人的一些补充说明:由于栈中的top指针指向栈中即将赋值的空闲存储地址,所以先将e的值赋给top指针所指向的存储空间,然后再将top指针向后移动一位*/
      return OK;
    } /*  Push */
    
    
    void Out_Stack(SqStack L){
        int *i;
        printf("
    当前栈内元素从栈底到栈顶为:");
        for(i=L.base;i<L.top;i++) printf("%10d",*i);
    }
    
    Status Pop(SqStack *S, SElemType *e) {  /*  p47 */
        if(S->base == S->top)
            return ERROR;
        *e = *--S->top;
        return OK;
    } /*  Pop */

    可以复制上述代码,也可以去我的网盘下载cpp源文件。

    http://pan.baidu.com/s/1mWOwO 

  • 相关阅读:
    D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
    Vijos P1389婚礼上的小杉
    AIM Tech Round (Div. 2) C. Graph and String
    HDU 5627Clarke and MST
    bzoj 3332 旧试题
    codeforces 842C Ilya And The Tree
    codesforces 671D Roads in Yusland
    Travelling
    codeforces 606C Sorting Railway Cars
    codeforces 651C Watchmen
  • 原文地址:https://www.cnblogs.com/uppercloud/p/DataStructure_Stack.html
Copyright © 2011-2022 走看看