栈(C语言实现)学习记录
来源:互联网 发布:jira mysql配置 编辑:程序博客网 时间:2024/05/16 19:15
栈(C语言实现)学习记录
题目: 写一个递归算法来实现字符串逆序存储,要求不另设存储空间。
问题分析:
由于要实现字符串的逆序存储,所以可以想到栈的先进后出的特性,刚好与此吻合,所以可通过栈来实现字符串的逆序存储。
1.栈的表示:
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
typedef char ElemType;
typedef struct Stack{
ElemType data[MAX];
int top;
int bottom;
int length;
}Stack, * pStack;
2.初始化栈:
算法步骤:
1)将栈顶及栈底的索引设为0
2)将栈的长度初始化为0。
算法描述:
void init(pStack stack){
stack->top = stack->bottom = 0;
stack->length = 0;
}
3.压栈:
算法步骤:
1)判断栈的长度是否大于栈的最大容量。
2)栈顶索引上移加1.
3)将栈元素压入到栈中。
4)栈的长度加1.
算法描述:
void push(pStack stack, ElemType e){
if(stack->length > MAX){
printf("栈溢出");
return ;
}
stack->top++;
stack->data[stack->top] = e;
stack->length++;
}
算法分析:
T(n) = O(1);
4.出栈:
算法步骤:
1)判断栈中是否存在元素。
2)输出栈元素。
3)栈顶索引下移减1.
4)栈的长度减1.
算法描述:
void pop(pStack stack){
if(stack->length <= 0){
printf("无可输出元素");
return ;
}
printf("%c", stack->data[stack->top]);
stack->top--;
stack->length--;
}
算法分析:
T(n) = O(1);
5.main函数:
int main()
{
Stack stack;
init(&stack);
int i = 0;
int j = 0;
char ch;
printf("===========input================\n");
while(i < MAX){
printf("Enter elem:");
scanf("%c", &ch);
getchar();
push(&stack, ch);
i++;
}
printf("\n=========output===============\n");
for(j = MAX; j > 0; j--){
pop(&stack);
}
return 0;
}
6.执行结果:
题目(算法设计题(5)):设二维数组啊a[1…m,1…n]含有m乘n个整数
1)写一个算法判断a 中所有元素是否互不相同?输出相关信息(yes/no)
2)试分析算法的时间复杂度。
算法步骤:
1) 将二维数组转换为一维数组。
2) 一个数组元素与其它剩余的数组元素对比。
算法描述:
status difference(ElemType arr[][N]){
int *p=arr[0];
int i=0, j, cnt=0;
for( i=0; i<M*N; i++ ){
for( j=i+1; j<M*N; j++ )
if( *(p+i) == *(p+j) )
cnt++;
}
if(cnt > 0){
return 0;
}
return 1;
}
执行结果如下:
算法分析:
T(n)= O(n2);
Main方法:
int main()
{
ElemType arr[M][N];
int i = 0;
int j = 0;
for(i = 0; i < M; i++){
for(j = 0; j < N; j++){
printf("Enter elem:");
scanf("%d", &arr[i][j]);
}
}
printf("the elements is diffent:");
if(difference(arr) == 1){
printf("yes");
}else{
printf("no");
}
return 0;
}
分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正,共同进步
- 栈(C语言实现)学习记录
- 单向链表(C语言实现)学习记录
- 双向链表(C语言实现)学习记录
- 链队列(C语言实现)学习记录
- C语言学习记录
- C语言学习记录
- C语言学习记录
- C语言学习记录
- C语言学习重点记录(一)
- C语言学习记录(九):迷你shell和迷你ftpd的实现(附源码)
- C语言字符串学习记录
- C语言学习记录1
- C语言学习记录2
- 记录学习C语言错误
- Huffman学习记录 c语言
- C语言基础知识学习记录
- c语言初步学习记录
- C语言学习记录总结
- 训练总结11.12
- 负载均衡-session共享的三种处理方法
- Angular2 指令—自定义指令
- 201711122223->mysql库新建table
- 新生赛 2017/11/12
- 栈(C语言实现)学习记录
- 6.14穷举法
- Android布局relative layout
- 51nod 1289 大鱼吃小鱼
- String、StringBuffer与StringBuilder 之间的区别
- 2000-开发工具
- 2017-11-12每日一练
- OKHttpClient的POST请求
- NOIP2017 滚粗记