线性表操作的实现

#include <stdio.h>
#include <stdlib.h>
#include <string>
#define MAX 100
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef struct{
     ElemType *elem;
     ElemType length;
     ElemType listsize;
     }SqList;//结构体
Status CreatList(SqList &L){//创建表
    L.elem=(int*)malloc(MAX *sizeof(int));
    printf("请输入表长:\n");
    scanf("%d",&L.length);
    printf("请输入%d个顺序表元素:\n",L.length);
   for(int i=0;i<L.length;i++)
        scanf("%d",&L.elem[i]);
}
Status Traverse(SqList L){//输出表中数据
    printf("表中数据为:");
    for(int i=0;i<L.length;i++){
        printf("%d ",L.elem[i]);
    }
}
Status LocateElem(SqList L,int e){
    printf("输入查找的元素:");
    scanf("%d",&e);
    for(int i=0;i<L.length;i++){
        if(L.elem[i]==e){
            printf("查找成功,查找元素为%d,位于表中第%d位",L.elem[i],i+1);
            printf("\n");
        }
    }
}
Status ListEmpty(SqList L){
    return (L.length==0)?true:false;
}
int makesureElem(SqList L,int e){
    int i;//确定要删除的元素
    for(i=0;i<L.length;i++){
        if(L.elem[i]==e){
            printf("要删除的元素 位置为 %d",i+1);
            printf("\n");
            return (i+1);
        }
    }
    printf("元素不存在");
    printf("\n");   return 0;
}
Status ListDelete(SqList &L){
    int i,e;
    printf("输入要删除的元素");
    scanf("%d",&e);
    i=makesureElem(L,e);
    if((i<1)||(i>L.length)) return 0;
    else{
    int *p,*q;
        p=&(L.elem[i-1]);
        e=*p;
        q=L.elem+L.length-1;
        for(++p;p<=q;++p)*(p-1)=*p;//被删除元素之后的元素左移
        --L.length;
        printf("元素被删除");
    }
    Traverse(L);
}
int main(){
    SqList(L);
    CreatList(L);
    ListEmpty(L);
    Traverse(L);
    LocateElem(L,1);
    ListDelete(L);
}



猜你喜欢

转载自blog.csdn.net/perhamer/article/details/79805481