【数据结构】线性表顺序存储的初始化、插入元素、删除元素

这段时间准备将书上的数据结构全部自己实践一遍。
线性表是有序和有限的,分顺序存储和链式存储。
本篇记录c语言实现顺序存储代码。

# include <stdlib.h>
# include <stdio.h>
# define MAXSIZE 100
# define ELEMENT int
typedef struct{
    ELEMENT ele[MAXSIZE];
    int last;   
}SQLIST;
int initial(SQLIST **p){  //初始化链表 
    *p=(SQLIST *)malloc(sizeof(SQLIST)); 
    if (!p)return -1;
    else{
    (*p)->last=-1;
    return 0;
    }
}
int insert(SQLIST *p,int i,ELEMENT a){//插入数据 i位置插入,数据为a 
    if(p->last==MAXSIZE){
        printf("数据已满\n"); 
        return -1;
    }
    else{

        if(i<=(p->last+1)&&i>-1){
            if(i==p->last+1){//末尾插入 
                p->ele[i]=a;
                p->last+=1;
                return 0;
            }
            else{//非末尾插入 
                int count;
                for(count=p->last;count>=i;count--){
                    p->ele[count+1]=p->ele[count];
                }
                p->ele[i]=a;
                p->last+=1;
                return 0;
            }
        }
        else{
            printf("插入位置有误\n");
            return -1;
        }
    }       
}
void multiinsert(SQLIST *p){//多次插入数据 
    int n,num,pos,sig;
    ELEMENT a; 
    printf("请输入插入数据个数\n");
    scanf("%d",&num);
    for(n=0;n<num;n++){
        printf("请输入插入的数据\n");
        scanf("%d",&a);
        printf("请输入插入数据的位置(0-%d)\n",(p->last)+1);
        scanf("%d",&pos);
        sig = insert(p,pos,a);
        if (sig == -1)break;
        int i;
        printf("插入完成后线性顺序表为\n"); 
        for(i=0;i<=p->last;i++){
        printf("%d,",p->ele[i]);
        }
    }
}   
void deletelist(SQLIST *p){//删除元素 
    printf("请输入删除第几个元素\n");
    int q,num;
    scanf("%d",&q);
    if(1<=q&&q<=p->last+1){
        for(num=q-1;num<p->last;num++){
            p->ele[num]=p->ele[num+1];
        }
        p->last=p->last-1;
        int i;
        printf("删除完成后线性顺序表为\n"); 
        for(i=0;i<=p->last;i++){
        printf("%d,",p->ele[i]);
        }
    }
    else{
        printf("删除位置出错\n");
    } 
}
int main(){
    SQLIST *p;
    int sig;
    sig = initial(&p);
    while(sig==-1){//分配失败重新分配 
        sig = initial(&p);
    }
    multiinsert(p);
    deletelist(p); 
}

猜你喜欢

转载自blog.csdn.net/yehuozhili/article/details/82318266