码迷,mamicode.com
首页 > 编程语言 > 详细

c语言描述的顺序表实现

时间:2016-07-25 16:00:24      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

//顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作)
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define INCREMENT 10
typedef int ElemType;
typedef struct{
        ElemType *elem;//数组指针代表存储基址
        int length;//当前顺序表长度
        int listsize;//当前已经分配的空间大小
}Sqlist;//顺序表的长度不一定会占满已经分配的空间
static Sqlist L;
static int e;
int Initlist(Sqlist *L){
    int i,length;
    printf("请输入顺序表的长度:\n");
    scanf("%d",&length);
    L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem){
        return ERROR;
    }
    printf("输入%d个元素,以空格隔开:\n",length);
    for(i=0;i<length;i++){
    scanf("%d",&L->elem[i]);
    }
    L->length=length;
    L->listsize=LIST_INIT_SIZE;
    return OK;
}
void TraverseList(Sqlist *L){
    int i;
    if(!L){
        printf("空表!");
        exit(ERROR);
    }
    for(i=0;i<L->length;i++){
        printf("%d\n",L->elem[i]);
    }
}
int ListInsert(Sqlist *L,int e,int m){
    ElemType *newbase;
    ElemType *p,*q;
    if(m<1||m>L->length){
            return ERROR;
    }
    if(L->length>=L->listsize){
        printf("当前空间满了!重新分配内存\n");
        newbase=(ElemType *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(ElemType));
        if(!newbase){
            return ERROR;
        }
        L->elem=newbase;
        L->listsize+=INCREMENT;
    }
    q=&(L->elem[m-1]);
    for(p=&(L->elem[L->length-1]);p>=q;p--){
        *(p+1)=*p;//从后往前依次后移
    }
    *q=e;
    L->length++;
    return OK;
}
int ListDelete(Sqlist *L,int m){
    if(m<1||m>L->length){
        return ERROR;
    }else{
        ElemType *p,*q;
        
        p=&(L->elem[m-1]);
        free(p);
        for(q=&(L->elem[L->length-1]);q>L->elem[m-1];q++){
            *(q-1)=*q;//从后往前依次前移
        }
    }
    return OK;
    
}
int main(){
    int i,n,m;
    if(Initlist(&L)==ERROR){
        printf("创建失败!");
        return ERROR;
    }
    TraverseList(&L);
    printf("输入要插入元素的和要插入的位置 用空格隔开!\n");
    scanf("%d%d",&n,&m);
    TraverseList(&L);
    printf("输入要删除的元素位置:\n");
    scanf("%d",&n);
    if(!ListDelete(&L,n)){
        printf("删除失败!");
        TraverseList(&L);
    }
    return OK;
}

 

c语言描述的顺序表实现

标签:

原文地址:http://www.cnblogs.com/zzy-frisrtblog/p/5703548.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!