2022 C语言数据结构总结浅浅入门(2)重定义与顺序表

类型重定义  (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
}

顺序表:
使用方便,但如果有大量数据,进行插入和删除将非常麻烦(要移动大量的数据)
数据元素个数固定

我们下期将引出解决此问题的概念——链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值