嵌入式学习14(数据结构开篇:结构体,栈)
来源:互联网 发布:逃生剧情解析 知乎 编辑:程序博客网 时间:2024/06/06 05:39
Talk is cheap,show me the code.
结构体
#include <stdio.h>struct student//定义一个新的类型(分配空间的模板){ int id; char name[10]; char addr[100]; short c_sore;};typedef struct student stu;//stu就是student的别名void main(){//基本用法 struct student a1;//定义变量,分配空间// a1={17002,"123","456",100}; 错误,只能在定义时初始化,或在之后逐一赋值 struct student a2={17002,"cmz","wuhan",100};//初始化 printf("%d",a2.id);//引用//指针 struct student *pst=&a2; printf("%d\n",sizeof(pst));//4 printf("%d %s %s %d\n",pst->id,(*pst).name,pst->addr,(*pst).c_sore);//数组 stu e1702[10]={ {17001,"yha","wuhan",98},{17003,"hello","hankou",90}, {17001,"yha","wuhan",98},{17003,"hello","hankou",90}, {17001,"yha","wuhan",98},{17003,"hello","hankou",90}, {17001,"yha","wuhan",98},{17003,"hello","hankou",90}, {17007,"haha","iam",98},{17003,"hello","hankou",90} }; int buf[10]={1,2,3,4,5,6,7,8,9,0}; printf("%s %d %s\n",e1702[0].name,e1702[0].id,e1702[0].addr);//下标法 printf("%s%d %s\n",(e1702+1)->name,(e1702+1)->id,(e1702+1)->addr);//指针//查找17007的个人信息,如果成功,则打印17007所有信息 int i,flag=0; for(i=0;i<10;i++) { if(e1702[i].id==17007) { flag=1; printf("%d号学生的信息为:",e1702[1].id); printf("%s %s %d\n",e1702[i].name,e1702[i].addr,e1702[i].c_sore); break;//退出循环 } } if (flag==0) printf("没有该学生的信息\n");}
注:分配空间时,会以字节对齐进行分配空间
1、 以最大类型长度作为单位分配空间
2、 如果此成员分配的空间足够供下一个成员使用,则共享此空间
struct student
{
int id; //4个
char name; //4个与后面共享
char addr;
short c;
};
//sizeof(struct student)为8
***栈***
头文件
#ifndef _STACK_DEF_#define _STACK_DEF_#define false 0#define true 1#define MAXSIZE 10typedef char BOOL;typedef int StackType;//模型:新的类型struct stack{ StackType buf[MAXSIZE]; int top;//指向栈顶元素};//一个容器extern BOOL initStack(struct stack*);//初始化extern BOOL isEmpty(struct stack*);//判断空extern BOOL isFull(struct stack*);//判断满extern BOOL push(struct stack*,StackType);//进栈extern BOOL pop(struct stack*,StackType*);//出栈#endif
主函数
#include"stack.h"#include<stdio.h>/********(1)初始化栈***********/BOOL initStack(struct stack* ps){ //初始化top值,指向空 ps->top=-1; return true;}/******(2)判断是否为空******///返回值:空-true 非空-falseBOOL isEmpty(struct stack* ps){ //左值尽可能为常量(在等于运算符中) if(-1==ps->top) { return true; } return false;}/*******(3)是否为满********/BOOL isFull(struct stack* ps){ if(MAXSIZE-1==ps->top) return true; else return false;}/******(4)压栈*********///前提:不能为满BOOL push(struct stack* ps,StackType data){ if(isFull(ps))//判断为满 return false;//压栈失败 ps->buf[ ++(ps->top) ]=data;//前自加:先自加,再取值 return true;//压栈成功}/******(5)出栈*******///前提:不能为空BOOL pop(struct stack* ps,StackType* pdata){ if(isEmpty(ps)) return false; //取出栈顶 *pdata=ps->buf[ ps->top-- ]; //后自减:先取值,后自减 //出栈成功 return true;}void main(){ struct stack s; initStack(&s); push(&s,1); push(&s,2); push(&s,3); StackType data; while(pop(&s,&data)) { printf("%d",data); } putchar(10);//换行}
阅读全文
0 0
- 嵌入式学习14(数据结构开篇:结构体,栈)
- 嵌入式学习开篇词
- 【数据结构】学习总结【开篇】
- 【s5p4418嵌入式学习】开篇01
- 数据结构开篇(表)
- 数据结构学习(结构体复习)
- 结构体和数据结构学习
- 数据结构学习记录-结构体
- 数据结构学习笔记--栈结构
- 【嵌入式学习历程9】数据结构之栈
- 嵌入式开篇
- 嵌入式学习26(数据结构 树)
- 开篇,从代码实现角度学习数据结构
- 共同学习Java源代码--数据结构--开篇语
- 数据结构开篇
- 数据结构与算法学习(三)栈结构Stack
- 数据结构学习笔记(六)-- 栈的顺序结构
- Embest嵌入式uclinux开发(开篇)
- 计算机基础总结
- Linux添加或者删除用户和用户组时常用的一些命令和参数
- java.lang.IllegalStateException: Could not auto-size column.
- form表单上传二维集合数组到Springmvc注意事项
- Vue.js
- 嵌入式学习14(数据结构开篇:结构体,栈)
- [052]TensorFlow Layers指南:基于CNN的手写数字识别
- AVL树
- 判断平衡二叉树/二叉树镜像/一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中
- HTML和CSS的注释方式及其作用
- Manacher算法总结
- (数据结构)二叉树的基本操作
- 关于按位与和按位或以及左/右移的相关知识
- Java设计模式之适配器模式