数据结构
C语言的设计目标是提供一种能以一种能以简易的方式编译、处理低级处理器、产生少量的机器码以及不需要任何环境支持便能运行的编程语言。
c语言的一些语法
1、#include <stdlib>
stdlib是c语言的一个头文件。包含了c语言标准库函数定义,意思是标准输入输出头文件,用到标准输入输出函数时使用。就相当于调用一些库(Java的第三方jar、Python的第三方库)
//a.h
void hello();
//a.c
#include<stdio.h>
#include"a.h"
void hello(){
printf("%s\n","hello world");
}
#void say_hello()
{
hello();
}
2、#ifndef
文件中的#ifndef,这是一个很关键的东西。需要注意的是,#ifndef起到的效果是防止一个源文件两次包含同一个,而不是防止两个源文件包含同一个头文件。而编译时,这两个文件要一同编译成一个可运行文件,于是可能产生大量的声明冲突。还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的
语句1 #ifndef 标识1
语句2 #define 标识1
语句3 #endif
语句4 ……
语句5 ……
该段代码意思是:如果标识1没有被定义,则重定义标识1,即执行语句2、语句3;如果标识1已经被定义,则直接跳过语句2、语句3,直接执行语句4、语句5、……
所以在写文件的时候加入这段文字容易让人进行辩解。
1、线性表
在数据结构中线性表因为它的连接方式不同将他分成顺序表和链式表
//以下是线性表的实现逻辑
define InitSize 10;//顺序表的初始值为10
typedef struct{
ElemType *data; //用于动态分配指针
int MaxSize;//顺序表的最大容量
int length;//顺序表的长度
}seqlist;//利用起别名的方式,对这一个类型进行封装
//初始化列表,对列表的内容进行封装
void InitList(SeqList &L){
L.data = (int *)malloc(IntSize*sizeof(int));//在c语言中malloc是用来申请容量地址的的,最后将申请类型的指针进行强行转换,变成申请时的数据类型
L.length=0;//指针的初始长度为0
L.MaxSize=InitSize;//将自定义常数InitSize赋值给顺序表的最大容量
}
//封装功能——扩展一个顺序表的长度
void IncreaseSize(Seqlist &L,int len){
int *p = L.data;//新定义一个指针,指向原来顺序表L的数据指针的部分
L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));//重新申请一个长度为新的顺序表赋值给L顺序表的指针
for(int i;i<L.length;i++){
L.data[i]=p[i]//将数据进行赋值,把原来复制到p的数据重新赋值给L
}
L.MaxSize = L.MaxSize+len; //长度也变成最大的
free(p);//释放原来的指针存储位置
}
//封装一个添加的功能函数
bool ListInsert(SeqList &L,int i,int e){
if(i<1 || i>L.length)//作为检测判断是否可以对顺序表进行插入
return false;
if(L.length>= MaxSize)//当前的存储已满不能进行插入
return false;
for(int j=L.length;j>=i;i--)
L.data[j]=L.data[j-i];//将所有位于第i个之前的元素全部都向后移动一个
L.data[i-1]=e;//第i个位置的对应下标索引是i-1,所以对i-1进行赋值
L.length++;//整体的长度加一
return true;最后返回bool成功调用的值
}
//封装一个删除顺序表元素的功能
bool ListDel(SeqList &L,int i){
if(i<1 || i>L.length)//作为检测判断是否可以对顺序表进行插入
return false;
if(L.length>= MaxSize)//当前的存储已满不能进行插入
return false;
for(int j=L.length;i<j;i++)
L.data[i-1]=L.data[i];//将从第i个开始将后面的一个向前进行传递
}
//封装一个查找顺序表的功能(按照值或者顺序)
int ListFind(SqlList L,int i){
if(i<1 || i>L.length)//作为检测判断是否可以对顺序表进行插入
return false;
if(L.length>= MaxSize)//当前的存储已满不能进行插入
return false;
retuen L.data[i-1];
}
由于源码太多我将分写在不同的文章里供大家参考,有错误的地方欢迎大家指正