【数据结构】线性表的顺序存储结构
发布时间:2020-12-15 06:32:51 所属栏目:安全 来源:网络整理
导读:#include "stdio.h" #define OK 1#define ERROR 0 #define TRUE 1#define FALSE 0#define MAXSIZE 20/*存储空间初始分配量*/typedef int ElemType; /*ElemType类型根据实际情况而定,这里假设为int*/typedef int Status;/*Status是函数的类型,其值是函数结
#include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /*存储空间初始分配量*/ typedef int ElemType; /*ElemType类型根据实际情况而定,这里假设为int*/ typedef int Status;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/ typedef struct { ElemType data[MAXSIZE]; int length; }SqList; Status visit(ElemType c) { printf("%d ",c); return OK; } /* 初始化顺序线性表 */ Status InitList(SqList *L) { L->length=0; return OK; } /*获得元素操作*/ Status GetElem(SqList L,int i,ElemType *e) { if(L.length == 0 || i < 1 || i > L.length) return ERROR; *e = L.data[i-1]; return OK; } /*插入操作*/ Status ListInsert(SqList *L,ElemType e) { int k; if(L->length == MAXSIZE) return ERROR; if(i < 1 || i > L->length + 1) return ERROR; if(i <= L->length) { for(k = L->length -1;k >= i-1;k--) L->data[k+1] = L->data[k]; } L->data[i-1] = e; L->length++; return OK; } /*删除操作*/ Status ListDelete(SqList *L,ElemType *e) { int k; if(L->length == 0) return ERROR; if(i < 1 || i > L->length) return ERROR; *e = L->data[i-1]; if(i < L->length) { for(k = i;k < L->length;k++) L->data[k-1] = L->data[k]; } L->length--; return OK; } /* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */ Status ListEmpty(SqList L) { if(L.length==0) return TRUE; else return FALSE; } /* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */ Status ClearList(SqList *L) { L->length=0; return OK; } /* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */ int ListLength(SqList L) { return L.length; } /* 初始条件:顺序线性表L已存在 */ /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */ /* 若这样的数据元素不存在,则返回值为0 */ int LocateElem(SqList L,ElemType e) { int i; if (L.length==0) return 0; for(i=0;i<L.length;i++) { if (L.data[i]==e) break; } if(i>=L.length) return 0; return i+1; } /* 初始条件:顺序线性表L已存在 */ /* 操作结果:依次对L的每个数据元素输出 */ Status ListTraverse(SqList L) { int i; for(i=0;i<L.length;i++) visit(L.data[i]); printf("n"); return OK; } void unionL(SqList *La,SqList Lb) { int La_len,Lb_len,i; ElemType e; La_len=ListLength(*La); Lb_len=ListLength(Lb); for (i=1;i<=Lb_len;i++) { GetElem(Lb,i,&e); if (!LocateElem(*La,e)) ListInsert(La,++La_len,e); } } int main() { SqList L; SqList Lb; ElemType e; Status i; int j,k; i=InitList(&L); printf("初始化L后:L.length=%dn",L.length); for(j=1;j<=5;j++) i=ListInsert(&L,1,j); printf("在L的表头依次插入1~5后:L.data="); ListTraverse(L); printf("L.length=%d n",L.length); i=ListEmpty(L); printf("L是否空:i=%d(1:是 0:否)n",i); i=ClearList(&L); printf("清空L后:L.length=%dn",i); for(j=1;j<=10;j++) ListInsert(&L,j,j); printf("在L的表尾依次插入1~10后:L.data="); ListTraverse(L); printf("L.length=%d n",L.length); ListInsert(&L,0); printf("在L的表头插入0后:L.data="); ListTraverse(L); printf("L.length=%d n",L.length); GetElem(L,5,&e); printf("第5个元素的值为:%dn",e); for(j=3;j<=4;j++) { k=LocateElem(L,j); if(k) printf("第%d个元素的值为%dn",k,j); else printf("没有值为%d的元素n",j); } k=ListLength(L); /* k为表长 */ for(j=k+1;j>=k;j--) { i=ListDelete(&L,&e); /* 删除第j个数据 */ if(i==ERROR) printf("删除第%d个数据失败n",j); else printf("删除第%d个的元素值为:%dn",e); } printf("依次输出L的元素:"); ListTraverse(L); j=5; ListDelete(&L,&e); /* 删除第5个数据 */ printf("删除第%d个的元素值为:%dn",e); printf("依次输出L的元素:"); ListTraverse(L); //构造一个有10个数的Lb i=InitList(&Lb); for(j=6;j<=15;j++) i=ListInsert(&Lb,j); unionL(&L,Lb); printf("依次输出合并了Lb的L的元素:"); ListTraverse(L); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |