C语⾔计算线性表的长度,c语⾔实现顺序结构的线性表,可⾃
动增加长度的
最近闲来⽆事,就顺便把数据结构再复习⼀下,在此把我刚写的c语⾔实现的顺序结构线性表送给⼤家,不要吝啬评论哦。
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 // 线性表存储空间的初始分配量,
#define INCREMENT 10 // 线性表存储空间的分配增量
//编码风格,所有变量单词第⼀个⼤写,函数的参数全部消协
typedef int ElemType;
typedef int Status;
//定义遍历函数
Status visit(ElemType &e)
{
printf("%d\n",e);
return TRUE;
}
typedef struct
{
ElemType *Data;
int Length;
int Size;
}ArrayList;
/* 初始化顺序线性表 */
Status InitList(ArrayList *arraylist)
{
arraylist->Data = (int *)malloc(MAXSIZE*(sizeof(ElemType)));
arraylist->Length = 0;
return TRUE;
}
/* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */ Status ListEmpty(ArrayList *arraylist)
{
if(arraylist->Length = 0)
return TRUE;
return FALSE;
}
/* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */
Status ListClear(ArrayList *arraylist)
{
arraylist->Length = 0;
return TRUE;
}
/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(ArrayList *arraylist)
{
return arraylist->Length;
}
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:⽤e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */ Status GetElem(ArrayList *arraylist,int pos,ElemType *e)
{
if(pos<1 || pos >arraylist->Length)
return FALSE;
*e = arraylist->Data[pos-1];
return TRUE;
}
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:返回L中第1个与e满⾜关系的数据元素的位序。 */
/* 若这样的数据元素不存在,则返回值为0 */
int LocateElem(ArrayList *arraylist,ElemType e)
if(ListEmpty(arraylist))
return FALSE;
int i;
for(i=0;iLength;i++)
{
if(arraylist->Data[i] == e)
return i+1;
}
return FALSE;
}
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
/* 操作结果:在L中第i个位置之前插⼊新的数据元素e,L的长度加1 */
Status ListInsert(ArrayList *arraylist,int pos,ElemType e)
{
if(pos<1 || pos >arraylist->Length+1)
return FALSE;
if(arraylist->Length==arraylist->Size)
{
arraylist->Data = (int *)realloc(arraylist->Data,(MAXSIZE+INCREMENT)*sizeof(ElemType)); if(arraylist->Data == NULL)
exit(OVERFLOW);
arraylist->Size += INCREMENT;
}
int i,j;
for(i=pos-1,j=arraylist->Length-1;i<=j;i++)
arraylist->Data[i+1] = arraylist->Data[i];
arraylist->Data[pos-1] = e;
arraylist->Length++;
return TRUE;
}
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并⽤e返回其值,L的长度减1 */
Status ListDelete(ArrayList *arraylist,int pos,ElemType *e)
if(pos < 1 || pos >arraylist->Length)
return FALSE;
*e = arraylist->Data[pos-1];
int i,j;
for(i=pos-1,j=arraylist->Length-1;i{
arraylist->Data[i] = arraylist->Data[i+1];
}
arraylist->Length-=1;
return TRUE;
}
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:依次对L的每个数据元素输出 */
Status ListTraverse(ArrayList *arraylist)
{
int i;
for(i=0;iLength;i++)
visit(arraylist->Data[i]);
return TRUE;
}
/*初始条件:两个顺序结构实现的线性表*/
/*操作结果:将两个线性表求并放在另⼀个线性表中*/
Status unionArrayList(ArrayList *arraylist1,ArrayList *arraylist2,ArrayList *arraylist3) {
int i,elem;
//求1和2并,放⼊3中
//先把1种的元素放⼊3
for(i=0;iLength;i++)
{
if(!LocateElem(arraylist3,arraylist1->Data[i]))
{
ListInsert(arraylist3,arraylist3->Length+1,arraylist1->Data[i]);
}
}
for(i=0;iLength;i++)
{
if(!LocateElem(arraylist3,arraylist2->Data[i]))
{
ListInsert(arraylist3,arraylist3->Length+1,arraylist2->Data[i]);
}
}c语言listinsert函数
return TRUE;
}
/*初始条件:两个顺序结构实现的线性表*/
/*操作结果:求两个集合的交集*/
Status jiaoArrayList(ArrayList *arraylist1,ArrayList *arraylist2,ArrayList *arraylist3) {
int i;
for(i=0;iLength;i++)
{
if(LocateElem(arraylist2,arraylist1->Data[i]))
{
ListInsert(arraylist3,arraylist3->Length+1,arraylist1->Data[i]);
}
}
return TRUE;
}
/*初始条件:两个顺序结构实现的线性表*/
/*操作结果:把这个集合arraylist1中相同的元素去掉放在2中*/
Status uniqueArrayList(ArrayList *arraylist1,ArrayList *arraylist2)
{
int i;
for(i=0;iLength;i++)
{
if(!LocateElem(arraylist2,arraylist1->Data[i]))
{
ListInsert(arraylist2,arraylist2->Length+1,arraylist1->Data[i]);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论