【数据结构】之 线性表详解
发布时间:2021-04-01 11:19:06 所属栏目:安全 来源:网络整理
导读:线性表(Linear List) 基本概念 线性表是由n(n=0)个类型相同数据元素组成的有限序列 。 数据元素可由若干个数据对象组成,且一个线性表中的数据元素必须属于同一数据对象 。 线性表示n个类型相同数据元素的有限序列,对n0,除第一个元素无直接前驱,最后一
【算法描述】顺序表的删除运算 //删除 int deleteList(List *L,char *content){ int k; //删除位置不合法则推出 if(i < 0 || (i >= L->len)){ printf("删除位置不合法!nn"); return ERROR; } //删除的表已空 if(L->len == 0){ printf("表已空!nn"); return ERROR; }else{ *content = L->data[i]; //前移 for(k = i; k <= L->len - 2; k++){ L->data[k] = L->data[k+1]; } //删除成功后表长度减一 L->len--; printf("删除成功!nn"); print(L); return OK; } }? 小结:与插入算法类似,删除运算也要移动结点。设E为删除一个元素所需移动元素的平均移动次数, 为 删除第i个元素的概率,并假设在任何位置上删除的概率相等,即 ,i=1,2,……,n 。则有: 最后的汇总代码如下: /* 线性表的顺序存储 基本操作:查找,插入,删除 */ #include<stdio.h> #include<string.h> #define MAXSIZE 100 #define OK 1 #define ERROR -1 typedef struct{ char data[MAXSIZE]; int len; //数据长度 }List; List* initList(List *L); //初始化 int getAsNum(List L,int num); //按序号查找 int getAsContent(List L,char content); //按内容查找 int insertList(List *L,char content); //插入,在元素之前插入 int deleteList(List *L,char *content); //删除 void print(List *L); //打印 //初始化顺序表 List* initList(List *L){ int num,&ch); L->data[i] = ch; } return L; } //按序号查找 int getAsNum(List L,int num){ if(num < 0 || num > L.len - 1){ printf("查找失败,位置 %d 超过链表长度!nn",num); return ERROR; }else{ printf("按序号查找成功,第 %d 个位置元素为 %c nn",num,L.data[num]); return num; } } //按内容查找 int getAsContent(List L,L.data[i]); return i; }else{ //未找到 printf("查找失败,没有你所找的元素!nn"); return ERROR; } } //插入,在元素之前插入 int insertList(List *L,char content){ int k; //插入的位置不在表的范围 if(i < 0 || i >= L->len){ printf("插入位置不合法!nn"); return ERROR; } //考虑表满的情况 if(L->len == MAXSIZE){ printf("表已满!无法插入!nn"); return ERROR; }else if(i >= 0 && i <= L->len - 1){ //插入位置后的元素向后移动 for(k = L->len - 1; k >= i; k--){ L->data[k+1] = L->data[k]; } L->data[i] = content; //表长度加一 L->len++; printf("插入成功!nn"); print(L); return OK; } } //删除 int deleteList(List *L,char *content){ int k; //删除位置不合法则推出 if(i < 0 || (i >= L->len)){ printf("删除位置不合法!nn"); return ERROR; } //删除的表已空 if(L->len == 0){ printf("表已空!nn"); return ERROR; }else{ *content = L->data[i]; //前移 for(k = i; k <= L->len - 2; k++){ L->data[k] = L->data[k+1]; } //删除成功后表长度减一 L->len--; printf("删除成功!nn"); print(L); return OK; } } //打印 void print(List *L){ int i; printf("===================顺序表如下===================n"); printf("共有 %d 个数据: ",L->len); for(i = 0; i < L->len; i++){ printf("%c ",L->data[i]); } printf("n"); } int main(void){ List L; int i,length,flag = 1; char ch,cha; //初始化 initList(&L); print(&L); //按序号查找 printf("请输入你要查找的元素序号:"); scanf("%d",&num); getchar(); getAsNum(L,num); //按内容查找 printf("请输入你要查找的元素的内容:"); scanf("%c",&ch); getchar(); getAsContent(L,ch); //插入元素 printf("请输入你要插入的内容(格式:addr_num data_char):"); scanf("%d %c",&num,&ch); getchar(); insertList(&L,ch); //删除元素 printf("请输入你要删除的位置(格式:addr_num):"); scanf("%d",&num); getchar(); deleteList(&L,&cha); return 0; }顺序表 ? 执行结果: (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |