c语言描述的顺序表实现

//顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作)
#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;
}
时间: 2024-10-08 00:49:48

c语言描述的顺序表实现的相关文章

【C语言】静态顺序表和动态顺序表的实现

静态顺序表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. 有两种定义顺序表的方法:一是静态地定义一张顺序表:二是动态地生成一张顺序表. 静态地定义一张顺序表的方法与定义一个数组的方法类似.可以描述如下: #define MAX_SIZE 100 typedef int DataType; typedef struct SeqList { DataType array[MAX_SIZE

c语言:【顺序表】静态顺序表的头插、头删

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #define MAXSIZE 1000 typedef int DateType; typedef struct SeqList {     DateType arr[MAXSIZE];     size_t size; }SeqList;

C语言学习笔记-顺序表

#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "conio.h" #define ERROR 0 #define OK 1 #define MAXSIZE 10 typedef int ElemType; typedef struct{ ElemType elem [MAXSIZE]; int last; }SeqList; /*打印顺序表*/ void

c语言学习之顺序表操作

 //seqlist.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ #define MAXSIZE  100 typedef struct { int listLen;  //节点数量 DATA_T  dataList[MAXSIZE+1]; }seqListType; /* 初始化顺序表 */ void seqlist_init(seqListType *sl); /* 返回顺序表的元素数量 */ int seqlist_length(seqListT

【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)

#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<assert.h> #define MAXSIZE 100 typedef int DataType; typedef struct SeqList {     DataType _array[MAXSIZE];     size_t _size; }SeqList; void InitSeqList(SeqList*

c语言实现动态顺序表

#include<string.h> #include<stdio.h> #include<malloc.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct Seqlist { DataType* _array; size_t _size; size_t capacity; }Seqlist; void Initlist(Seqlist *s)

【数据结构】之顺序表(Java语言描述)

之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中,为我们提供了专门的顺序表的数据结构API-- ArrayList . Java中的ArrayList的基本存储思路和C语言中的思路相似,即将所有元素存储在一个数组中,当数组中的元素个数达到某种标准时,就要扩容.由于顺序表中的其他操作在Java和C中的实现方式大同小异,因此,本文不再详细介绍这些操作

Java语言描述顺序表类,顺序表类的基本操作实现

数据结构(Java版)ch2 线性表的顺序存储(顺序表) 线性表的抽象数据Java接口描述如下: package ch2; /** * 线性表的抽象数据接口,用Java语言描述线性表的这些功能! * @author 房廷飞 * */ public interface IList { public void clear(); //将线型表置成空表 public boolean isEmpty(); //判断是不是空表 public int length(); //返回线性表的长度 public O

利用C语言实现顺序表

利用C语言实现静态顺序表 //---------- 头文件#include "SeqList.h" -------------------- #pragma once #include<stdio.h>#include<stdlib.h>#include<string.h> #define MAX 100 //------------------ 定义数据类型 ----------------------------typedef int DataT