• 顺序栈——课上练


      1 #include <stdio.h>
      2 
      3 /*此处是顺序栈数据结构定义*/
      4 typedef int DataType;
      5 struct seqStack
      6 {//有3个数据成员
      7   int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM   
      8   int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可  整型  curNum
      9   DataType *element;//用于存放顺序栈数据元素的连续空间的起始地址  
     10 };
     11 
     12 typedef struct seqStack *PseqStack;
     13 //第一关
     14 PseqStack createNullStack_seq(int m)
     15 {//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
     16  //若m=0,则返回NULL 
     17  if(m==0){
     18      return 0;
     19  }
     20  PseqStack stack = (PseqStack)malloc(sizeof(struct seqStack));
     21     if(stack!=NULL){
     22         stack->element = (DataType*)malloc(sizeof(DataType)*m);
     23         stack->MAXNUM=m;
     24         stack->top=0;
     25     }
     26     return stack;
     27 }
     28 
     29 //第二关
     30 int isNullStack_seq(PseqStack L)
     31 {
     32   //判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
     33 if(L==NULL){
     34     return -1;
     35 
     36 }
     37 if(L->top==0){
     38     return 1;
     39 }
     40 return 0;
     41 }
     42 
     43 
     44 //第三关 
     45 int isFullStack_seq(PseqStack L)
     46 {
     47   //判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
     48 if(L->top==L->MAXNUM){
     49     return 1;
     50 }
     51 return 0;
     52 }
     53 
     54 
     55 //第四关
     56 int push_seq(PseqStack L ,DataType x)
     57 {//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
     58     if(L==NULL||isFullStack_seq(L)){
     59         return 0;
     60     }
     61     L->top++;
     62     L->element[L->top]=x;
     63     return 1;
     64     
     65 }
     66  
     67 
     68 
     69 //第五关
     70 DataType pop_seq(PseqStack L)
     71 {//弹栈并返回删除元素,若栈为空,则返回-1
     72     if(L==NULL){
     73         return;
     74     }
     75     if(L->top==0){
     76         return -1;
     77     }else{
     78         int ans=L->element[L->top];
     79         L->element[L->top]=0;
     80         L->top--;
     81         return ans;
     82     }
     83     
     84 }
     85 
     86 //第六关
     87 DataType top_seq(PseqStack L)
     88 {// 取栈顶元素返回,若栈为空,则返回-1
     89     if(L->top==0&&L!=NULL){
     90         return -1;
     91     }
     92     if(L!=NULL){
     93         return L->element[L->top];
     94     }
     95 }
     96 
     97 //销毁顺序栈,释放栈所占存储空间
     98 int destroystack_seq(PseqStack L)
     99 {
    100     //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
    101     if(L==NULL){
    102         return 0;
    103     }
    104     int cnt=0;
    105     while(L->top!=0){
    106         cnt++;
    107         L->top--;
    108     }
    109 }
    110 
    111 
    112 //第七关
    113 //使用已实现的栈操作,实现数制转换
    114 
    115 void print(PseqStack L)
    116 {
    117 //逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号
    118 if(L==NULL){
    119     return;
    120 }
    121 while(L->top!=0){
    122     printf("%d",L->element[L->top]);
    123     L->top--;
    124 }
    125 
    126 }
    127 
    128 void convert(int data , int k)
    129 {
    130 //利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果
    131 //十六进制时输出 A ,B ,C, D,E,F 使用大写字母
    132     PseqStack L= createNullStack_seq(1000);
    133     if(k==2){
    134         while(data){
    135             push_seq(L,data%2);
    136             data/=2;
    137         }
    138         while(L->top!=0){
    139             printf("%d",pop_seq(L));
    140         }
    141 
    142     }
    143     if(k==8){
    144         while(data){
    145             push_seq(L,data%8);
    146             data/=8;
    147         }
    148         while(L->top!=0){
    149             printf("%d",pop_seq(L));
    150         }
    151 
    152     }
    153     if(k==16){
    154         char Hex[20]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    155         while(data){
    156             push_seq(L,data%16);
    157             data/=16;
    158         }
    159         while(L->top!=0){
    160             printf("%c", Hex[pop_seq(L)]);
    161 
    162         }
    163 
    164     }
    165 }
    View Code
  • 相关阅读:
    Python 元组
    Python 字典
    Python 列表
    Python 数字(函数)
    Python 序列操作符与函数(字符串)
    JavaScript使用IEEE 标准进行二进制浮点运算,产生莫名错误
    网站用户体验要点(翻译理论)
    去掉checkbox边框的方法
    WPF数据模板样式选择器
    JS中年份问题的纠结!
  • 原文地址:https://www.cnblogs.com/jeseesmith/p/13817307.html
Copyright © 2020-2023  润新知