永发信息网

线性表的所有操作

答案:2  悬赏:70  手机版
解决时间 2021-06-02 07:11
RT,所有操作共有多少?可否用C语言全部写出来?谢谢!
最佳答案

16种


#include <stdio.h>
#include <stdlib.h>
typedef int elemType;



struct List{
    elemType *list;
    int size;
    int maxSize;
};


void againMalloc(struct List *L)
{
   
    elemType *p = realloc(L->list, 2 * L->maxSize * sizeof(elemType));
    if(!p){   
    printf("存储空间分配失败! ");
    exit(1);
    }
    L->list = p;   
    L->maxSize = 2 * L->maxSize;   
}



void initList(struct List *L, int ms)
{
   
    if(ms <= 0){
    printf("MaxSize非法! ");
    exit(1);   
    }
    L->maxSize = ms;   
    L->size = 0;
    L->list = malloc(ms * sizeof(elemType));
    if(!L->list){
    printf("空间分配失败! ");
    exit(1);
    }
    return;
}



void clearList(struct List *L)
{
    if(L->list != NULL){
    free(L->list);
    L->list = 0;
    L->size = L->maxSize = 0;
    }
    return;
}



int sizeList(struct List *L)
{
    return L->size;
}



int emptyList(struct List *L)
{
    if(L->size ==0){
    return 1;
    }
    else{
    return 0;
    }
}



elemType getElem(struct List *L, int pos)
{
    if(pos < 1 || pos > L->size){   
    printf("元素序号越界! ");
    exit(1);
    }
    return L->list[pos - 1];   
}



void traverseList(struct List *L)
{
    int i;
    for(i = 0; i < L->size; i++){
    printf("%d ", L ->list[i]);
    }
    printf(" ");
    return;
}



int findList(struct List *L, elemType x)
{
    int i;
    for(i = 0; i < L->size; i++){
    if(L->list[i] == x){
    return i;
    }
    }
    return -1;
}



int updatePosList(struct List *L, int pos, elemType x)
{
    if(pos < 1 || pos > L->size){   
    return 0;
    }
    L->list[pos - 1] = x;
    return 1;
}



void inserFirstList(struct List *L, elemType x)
{
    int i;
    if(L->size == L->maxSize){
    againMalloc(L);
    }
    for(i = L->size - 1; i >= 0; i--){
    L->list[i + 1] = L ->list[i];
    }
    L->list[0] = x;
    L->size ++;
    return;
}



void insertLastList(struct List *L, elemType x)
{
    if(L->size == L ->maxSize){   
    againMalloc(L);
    }
    L->list[L->size] = x;   
    L->size++;   
    return;
}



int insertPosList(struct List *L, int pos, elemType x)
{
    int i;
    if(pos < 1 || pos > L->size + 1){   
    return 0;
    }
    if(L->size == L->maxSize){   
    againMalloc(L);
    }
    for(i = L->size - 1; i >= pos - 1; i--){
    L->list[i + 1] = L->list[i];
    }
    L->list[pos - 1] = x;
    L->size++;
    return 1;
}

void insertOrderList(struct List *L, elemType x)
{
    int i, j;
   
    if(L->size == L->maxSize){
    againMalloc(L);
    }
   
    for(i = 0; i < L->size; i++){
    if(x < L->list[i]){
    break;
    }
    }
   
    for(j = L->size - 1; j >= i; j--)
    L->list[j+1] = L->list[j];
   
    L->list[i] = x;
   
    L->size++;
    return;
}



elemType deleteFirstList(struct List *L)
{
    elemType temp;
    int i;
    if(L ->size == 0){
    printf("线性表为空,不能进行删除操作! ");
    exit(1);
    }
    temp = L->list[0];
    for(i = 1; i < L->size; i++)
    L->list[i-1] = L->list[i];
    L->size--;
    return temp;
}



elemType deleteLastList(struct List *L)
{
    if(L ->size == 0){
    printf("线性表为空,不能进行删除操作! ");
    exit(1);
    }
    L->size--;
    return L ->list[L->size];    
}

elemType deletePosList(struct List *L, int pos)
{
    elemType temp;
    int i;
    if(pos < 1 || pos > L->size){    
    printf("pos值越界,不能进行删除操作! ");
    exit(1);
    }
    temp = L->list[pos-1];
    for(i = pos; i < L->size; i++)
    L->list[i-1] = L->list[i];
    L->size--;
    return temp;
}

int deleteValueList(struct List *L, elemType x)
{
    int i, j;
   
    for(i = 0; i < L->size; i++){
    if(L->list[i] == x){
    break;
    }
    }
   
    if(i == L->size){
    return 0;
    }
   
    for(j = i + 1; j < L->size; j++){
    L->list[j-1] = L->list[j];
    }
    L->size--;
    return 1;
}



main()
{
    int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    int i;
    struct List L;
    initList(&L, 5);
    for(i = 0; i < 10; i++){
    insertLastList(&L, a[i]);
    }
    insertPosList(&L, 11, 48);    insertPosList(&L, 1, 64);
    printf("%d ", getElem(&L, 1));
    traverseList(&L);
    printf("%d ", findList(&L, 10));
    updatePosList(&L, 3, 20);
    printf("%d ", getElem(&L, 3));
    traverseList(&L);
    deleteFirstList(&L);    deleteFirstList(&L);
    deleteLastList(&L);    deleteLastList(&L);
    deletePosList(&L, 5);    ;deletePosList(&L, 7);
    printf("%d ", sizeList(&L));
    printf("%d ", emptyList(&L));
    traverseList(&L);
    clearList(&L);
}
希望我的回答对您有所帮助!

全部回答

找本数据结构的书,一般都是用c写的啊。网上数据结构 的教程也应该是的。

------------------------

上海财智学院助你成功!www.witedu.org.cn

一本大学专业的全日制自考助学,以及出国留学项目!欢迎在线咨询

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
小游戏下载到电脑后怎样玩
为什么如果中行加息,会影响房价?
李秀满为什么宠希澈
档案在人才交流中心,人在上海工作,想升副高
猎国最新更新/最新更新(跳舞)猎国txt下载
vera什么意思 做为名字有什么含义
寻仙这只骑宠有必要洗点吗?
带有密码锁的手机好吗?
问道35级礼包都给什么御灵?
dnf红眼满级能剩下多少SP,(抓头满、十字满
怎样克服学习上的惰性。
鬼泣、修罗、散打哪个刷图厉害?或其他职业、
广州哪里有魅族专卖店
谁能教练我看竹笛的普,怎么样学?多谢啦!
为什么每人都想出国??
推荐资讯
河南大学附近有没有能逛街有好吃的的地?
远安县宜昌贝贝拉姆全国孕婴连锁机构远安店哪
我想请你们给我儿子名字打分,谢谢!
蝉是靠什么飞行的
QQ三国什么职业最厉害,是pk哟
SD敢达新出的80的神敢达和100的神敢达技能会
我下载了一个700M的WINDOWS 7的压缩包。是VHD
那种鱼可以打绳?
我怀孕两个多月了前几天因为有急事跑了几步后
什么是嫁妆?
北京哪有请貔貅的地方?
所谓的朋友是什么概念
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?