顺序表的基本操作

来源:互联网 发布:炫浪网络社区百合 编辑:程序博客网 时间:2024/06/03 23:42
/*    Name: 线性表基本操作     Copyright:     Author: zxm    Date: 14/06/17 21:09    Description:    线性表的建立 查找 删除 插入 置空 合并有序表 */#include <stdio.h>#define MAX 100typedef struct {    int last;        //记录线性表中最后一个元素在数组elem[]中的位置    int elem[MAX];}SeqList;/*所有的操作需传入L的地址,改变的才是L的值(地址传递).否则改变的的只是形参的值(即值传递).*///初始化线性表 void InitList(SeqList *L){    L->last = -1;  }//返回表元素个数,若为空表返回0 int ListLength(SeqList *L){    return L->last+1;} //向表后添加数据 void AddList(SeqList *L,int i){    L->elem[L->last+1] = i;    L->last++;}//在表中第k位插入值为e的数据 void InsertList(SeqList *L, int k, int e){    L->last++;    for(int i = L->last; i >= k-1; i--){        L->elem[i] = L->elem[i-1];    }    L->elem[k-1] = e;}//删除线性表中第k个元素,并用e返回其值 bool DelList(SeqList *L, int k, int *e){    int i = 0;    if(k < 1 || k > L->last+1){         return false;//删除位置不合法    }     *e = L->elem[k-1];    for(i = k-1; i <= L->last; i++){        L->elem[i] = L->elem[i+1];    }     L->last--;    return true;} //判断是否为空表 bool EmptyList(SeqList *L){    if(L->last == -1)return true;    else return false;} //寻找线性表中第k个元素,返回其值 bool FindList(SeqList *L, int k, int *e){    if(k < L->last && k >= 1){        *e = L->elem[k-1];         return true;    }    else     {        printf("寻找位置不合法");        return false;       }}//寻找线性表中值为k的元素,返回在表中位置,未找到返回-1 int LocateList(SeqList *L, int k){    int i;    for(i = 0; i <= L->last; i++){        if(L->elem[i] == k)return i+1;    }    return -1;}//合并两个有序线性表void MergeList(SeqList *L,SeqList *L2){    int i = 0, j = 0;    while(i <= L->last && j <= L2->last){        if(L->elem[i] < L2->elem[j]){            i++;        }else{            InsertList(L,i+1,L2->elem[j]);            j++;            i++;            }    }    while(j++ <= L2->last){    //  L->last++;     AddList(L,L2->elem[j]);    }} //打印表中的值void printList(SeqList *L){    for(int i = 0; i <= L->last; i++){        printf("%d ",L->elem[i]);    }}int main(){    SeqList L;    InitList(&L);    SeqList L2;    InitList(&L2);    int n;    int k,e;    //在表中添加数据     while(scanf("%d",&n)!=EOF){        AddList(&L,n);    }       printList(&L);    //删除数据    printf("删除第k个数据:");    scanf("%d",&k);    if(DelList(&L,k,&e))    printf("删除的数据是:%d\n",e);    else printf("删除位置不合法\n");    printList(&L);    //寻找第k个数据    printf("寻找第k个数据:");     scanf("%d",&k);    if(FindList(&L,k,&e)){        printf("找到的数据是%d\n",e);    }    else printf("寻找位置不合法\n");    //寻找值为e的数据    printf("寻找值为e的数据:");    scanf("%d",&e);    k = LocateList(&L,e);    if(k==-1){        printf("线性表中无值为%d的元素\n",e);     }else{        printf("值为%d的元素在线性表中位于第%d位\n",e,k);    }    //向表中第k位插入值为e的元素    printf("向表中第k位插入值为e的元素(输入两数之间用空格隔开):");    scanf("%d %d",&k,&e);    if(k > L.last){        printf("插入位置不合法\n");    }else{        InsertList(&L,k,e);        printList(&L);    }    //合并两个线性表    printf("合并两个有序线性表\n");    printf("输入另一个非递减有序线性表:");    while(scanf("%d",&n)!=EOF){        AddList(&L2,n);    }    MergeList(&L,&L2);    printf("合并之后的线性表为:");    printList(&L);    return 0;}

.