赞
踩
一、顺序栈定义
二、初始化一个空的顺序栈
三、判断顺序栈是否为空
四、判断顺序栈是否已满
五、压栈push:插入数据元素x
六、弹栈pop:删除元素
七、取栈顶元素
八、利用栈实现数进制转换
1.弹出元素->输出
2.将data转换成k进制
创建栈L:
转换成二进制:
转换成八进制:
转换成16进制:
1.定义:
2.除法(n ≠ 0) push
3.pop
- #include <stdio.h>
- #include<stdlib.h>
- /*此处是顺序栈数据结构定义*/
- typedef int DataType;
- struct seqStack
- {//有3个数据成员
- int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM
- int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可 整型 curNum
- DataType* element;//用于存放顺序栈数据元素的连续空间的起始地址
- };
- typedef struct seqStack* PseqStack;
-
- //第一关
- PseqStack createNullStack_seq(int m)
- {//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
- //若m=0,则返回NULL
- PseqStack p = (PseqStack)malloc(sizeof(struct seqStack));//动态创建一个PseqStack类型的变量p,
- //不小于 sizeof(struct seqStack)字节
- if (m != 0) //m:能存放的最大元素个数
- {
- p->element = (DataType*)malloc(m * sizeof(DataType));//元素分配空间
- if (p->element)
- {
- p->top = 0; //下溢:空栈进行出栈
- p->MAXNUM = m;//上溢: 已有m个元素进行进栈
- return p;
- }
- else free(p);
- }
- return NULL;
- }
-
-
-
-
-
- //第二关
- int isNullStack_seq(PseqStack L)
- {
- //判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
- if (L == NULL) return -1;
- else
- {
- if (L->top == 0) return 1;
- else return 0;
- }
- }
-
-
- //第三关
- int isFullStack_seq(PseqStack L)
- {
- //判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
- if (L->top >= L->MAXNUM)
- return 1;
- else
- return 0;
- }
-
-
- //第四关
- int push_seq(PseqStack L, DataType x)
- {//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
- if (L->top >= L->MAXNUM)
- return 0;
- else
- {
- L->top = L->top + 1; //栈顶=栈顶+1
- L->element[L->top] = x; //给结构体 L中一个数组成员element[]的某一个L->top赋值
- return 1;
- }
-
- }
-
- //第五关
- DataType pop_seq(PseqStack L)
- {//弹栈并返回删除元素,若栈为空,则返回-1
- if (L->top == 0)
- return -1;
- else
- {
- int m = L->element[L->top];//定义栈顶元素m
- L->top = L->top - 1; //栈顶=栈顶-1
- return m; //返回m
- }
- }
-
- //第六关 取栈顶元素
- DataType top_seq(PseqStack L)
- {//取栈顶元素返回,若栈为空,则返回-1
- if (L->top == 0)
- return -1; //返回-1
- else
- return (L->element[L->top]);//返回栈顶元素
- }
- //销毁顺序栈,释放栈所占存储空间
- int destroystack_seq(PseqStack L)
- {
- //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
- if (L != NULL)
- {
- int num = L->top + 1;//定义num(销毁的栈中现有数据元素的个数0-top)
- L->MAXNUM = 0; //能存放的最大元素个数为0(待销毁的线性表不存在)
- free(L->element); //释放元素 ,销毁线性表
- return num; //返回
- }
- return 0;
- }
-
- //第七关
- //使用已实现的栈操作,实现数制转换
- void print(PseqStack L)
- {
- //逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号
- while (L->top != 0)
- {
- printf("%d", pop_seq(L));
- }
- }
-
- void convert(int data, int k)
- {
- //利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果
- //十六进制时输出 A ,B ,C, D,E,F 使用大写字母
- PseqStack L = createNullStack_seq(200);
- if (k == 2)
- {
- int m = data % 2;
- push_seq(L, m);
- int n = data / 2;
- while (n != 0)
- {
- m = n % 2;
- n = n / 2;
- push_seq(L, m);
- }
- print(L);
- }
- if (k == 8)
- {
- int m = data % 8;
- push_seq(L, m);
- int n = data / 8;
- while (n != 0)
- {
- m = n % 8;
- n = n / 8;
- push_seq(L, m);
- }
- print(L);
- }
- if (k == 16)
- {
- int m = data % 16; char c;
- if (m >= 10)
- {
- c = m - 10 + 'A';
- }
- push_seq(L, c);
- int n = data / 16;
- while (n != 0)
- {
- m = n % 16;
- n = n / 16;
- if (m >= 10)
- {
- c = m - 10 + 'A';
- }
- else
- {
- c = m + '0';
- }
- push_seq(L, c);
- }
- while (L->top != 0)
- {
- printf("%c", pop_seq(L));
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。