1.C的函数书写
一般格式如下:
返回值类型 方法名(形参列表) //函数头
{
函数体; //一条或多条C语句
}
举个简答的例子:
int Max(int a, int b)
{
if(a > b)
return a;
else
return b;
}
2、线性表
2.1 定义
线性表是具有相同特性数据元素的一个有限序列。所含元素的个数叫做线性表的长度n。n=0时为空表。
2.2 存储结构
有顺序存储和链式存储两种,故线性表分为顺序表和链表两种。
顺序表和链表的区别为:
(1)基于空间的比较
1)存储分配的方式:顺序表是一次性分配,链表是多次分配。
2)存储密度: 顺序表是1,链表小于1。
(2)基于时间的比较
1)存取方式:顺序表可随机也可顺序,而链表只能顺序存取。
2)插入/删除移动个数:顺序表平均需要移动一半元素,链表不需要移动元素,只需要修改指针。
2.3 顺序表的CURD算法
2.3.1按元素值的查找算法
int SelectElem (SqlList L , int a)
{
int i;
for(i=0;i<L.length;i++)
if(a==L.data[i])
return i;
return -1; //没找到,返回-1作为失败标记
}
2.3.2插入数据元素的算法
int insertElem(SqlList &L , int p , int b) //L本身发生改变,用引用型
{
int i;
if(p<0||p>L.length||L.length==maxSize)
return 0; //失败返回0
for(i=L.length-1;i>p;--i)
L.data[i+1] =L.data[i];
L.data[p] = b;
++(L.length); //表内元素+1,表长自增1
renturn 1; //插入成功,返回1
}
2.3.3 删除算法
int deleteElem(SqlList &L, int p, int &e) //需要改变的变量用引用型
{
int i;
if(p<0||p>L.length-1)
return 0;
e=L.data[p]; //将要被删除的元素赋值给e
for(i=p;i<L.length-1;++i)
L.data[i] = L.data[i+1];
--(L.length);
return 1;
}
2.4 单链表的操作
2.4.1 单链表的归并操作
A和B是两个元素递增有序的单链表(含头结点),将A和B归并成一个元素值非递减有序的链表C,采用尾插法。
void merge(LNode *A, LNode *B, LNode *&C)
{
LNode *P = A->next; //用p来追踪A的最小值结点,A->next表示A链表的开始结点,A是递增的,故为最小值结点
LNode *q = B->next; //用q追踪B的最小值结点
LNode *r;
C=A; //用A的头结点来做C的头结点
C->next = null; //表示C只取A的头结点,其余为空
free(B); //释放无用的B的头结点
r = C; //r指向C,此时头结点也是终端结点
while(p!=null||q!= null) //当p、q都不为空时,取p和q所指结点中的较小值插入C的尾部
{
if(p->data<=q->data) //if语句中r始终指向C的终端结点,新结点被链接入C并重新指向新的终端结点
{
r->next=p;
p=p->next;
r=r->next;
}else
{
r->next=q;
q=q->next;
r=r->next;
}
}
r->next =NULL;
if(p!=NULL)r->next=p;
if(q!=NULL)r->next=q;
}
2.4.2 建立单链表
尾插法:
void createlistR(LNode *&C, int a[], int n)
{
LNode *s,*r;
int i;
C=(LNode *)malloc)(sizeod(LNode)); //申请C的头结点空间
C->next=NULL;
r=C; //尾指针r指向头结点
for(i=0;i<n;++i)
{
s=(LNdoe *)malloc(sizeof(LNode)); //生成新结点
s->data=a[i];
r->next=s; //用r接纳新结点
r=r->next; //r始终指向终端结点,以便接纳下一个到来的结点
}
r->next=NULL; //数组a的所有元素已装入C中,C的终端结点为空,C建立完成
}
头插法:
void createlist1(LNode *&C,int a[],int n)
{
LNode *s;
int i;
C=(LNode *)malloc(sizeof(LNode));
C->next=NULL;
for(i=0;i<n;++i)
{
s=(LNode *)malloc(sizeof(LNode));
s->data=a[i];
s->next =C->next;
C->next=s;
}
}