加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

【数据结构】之 线性表详解

发布时间:2021-03-31 20:15:29 所属栏目:安全 来源:网络整理
导读:线性表(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;
} 
顺序表

?

执行结果:

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!