类型重定义 (typedef =type define)
1 普通类型重定义
typedef int size_t; //typedef 能将int 重定义成size_t
size_t a; //int a
typedef unsigned char UINT8; //UINT8 a; //定义了一个 无符号8位的整型
typedef char INT8;
typedef unsigned short UINT16;
typedef short INT16;
typedef unsigned int UINT32;
typedef int INT32;
char 是一个特殊的整型,8位,里面存储的是ascii码(详情请找ascii码)2 学生结构体类型重定义
2 学生结构体类型重定义
struct student
{
char name[20];
int age;
};
struct student s1;
方法1:
typedef struct student stu_t;
stu_t s1; //可以省略struct
方法2:
typedef struct student
{
char name[20];
int age;
}stu_t;
方法3: 省略结构体名
typedef struct
{
char name[20];
int age;
}stu_t;
例:
#include <stdio.h>
typedef struct
{
char name[20];
int age;
}stu_t;
int main()
{
stu_t s1 = {"xiaoli", 25};
printf("%s,%d\n", s1.name, s1.age);
}
typedef int data_t;
typedef struct
{
int data[100]; //存储顺序表的数组
int last; //元素个数(当表空时,last = 0, last 同时也是下一个要存储数据的位置)
} sqlist_t;
顺序表是线性表的一种,类似于数组,记录在内存中是挨着放的
顺序表有如下操作
1)求顺序表中有效元素个数
2)取出顺序表中某个元素
3)向顺序表中插入元素
4)从顺序表中删除元素
5)在顺序表中查找数据
以下为对应代码
顺序表的定义
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[100];
int last;
}sqlist_t;
//1) 创建空顺序表
sqlist_t *CreateEmptySqlist()
{
sqlist_t *p = malloc(sizeof(sqlist_t)); //sizeof(sqlist_t) ? 404
p->last = 0;
return p;
}
//2) 判断顺序表是不是空 如果空,返回1, 非空 返回0
int EmptySqlist(sqlist_t *p)
{
if(p->last == 0)
return 1;
else
return 0;
}
//3)判断顺序表是否满 //如果为满返回 1, 不满 返回0
int FullSqlist(sqlist_t *p)
{
if(p->last == 100)
return 1;
else
return 0;
}
//4 清空顺序表
void ClearSqlist(sqlist_t *p)
{
p->last = 0;
}
//5 求表长
int LengthSqlist(sqlist_t *p)
{
return p->last;
}
//6 在表中指定位置插入元素 成功返回0, 失败返回-1
int InsertSqlist(sqlist_t *p, int pos, int x)
{
int i;
if(pos > p->last || pos < 0)
return -1;
for(i = p->last; i >= pos; i--)
{
p->data[i + 1] = p->data[i];
}
p->data[pos] = x;
p->last++;
return 0;
}
//7 从顺序表中删除指定位置的元素 成功返回0, 失败返回-1
int DeleteSqlist(sqlist_t *p, int pos)
{
int i;
if(pos >= p->last || pos < 0)
return -1;
for(i = pos; i < p->last; i++)
{
p->data[i] = p->data[i + 1];
}
p->last--;
return 0;
}
//8 打印表中所有数据
void print_all(sqlist_t *p)
{
int i;
for(i = 0; i < p->last; i++)
printf("%d,", p->data[i]);
printf("\n");
}
///测试
int main()
{
sqlist_t *p = CreateEmptySqlist();
InsertSqlist(p, 0, 40); //40
InsertSqlist(p, 0, 30); //30, 40
InsertSqlist(p, 0, 10); //10, 30, 40
InsertSqlist(p, 1, 20); //10, 20, 30, 40
print_all(p); //10, 20, 30, 40
DeleteSqlist(p, 1);
print_all(p); //10, 30, 40
}
顺序表:
使用方便,但如果有大量数据,进行插入和删除将非常麻烦(要移动大量的数据)
数据元素个数固定
我们下期将引出解决此问题的概念——链表