【数据结构】之 线性表详解
发布时间:2021-04-01 03:52:08 所属栏目:安全 来源:网络整理
导读:副标题#e# 线性表(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;
}
顺序表
? 执行结果: (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


