顺序表基本操作样例

来源:互联网 发布:七天网络注册账号入口 编辑:程序博客网 时间:2024/06/07 20:10

顺序表基本操作样例
基本代码

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LISTINCREASMENT 100                 /*每次分配元素的个数*/#define  LISTSIZE 10                           /*顺序存储的最大个数*/#define  OVERFLOW -1#define  OK 1  typedef int ElemType;typedef struct                                   /*顺序表元素的的定义*/{    ElemType * elem;    int length;    int listsize;} Sqlist;int SqInitial(Sqlist &L)                           /*初始化线性表*/{    L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));    if (! L.elem)  exit(OVERFLOW); //存储分配失败     L.length=0;    L.listsize=LISTSIZE;    return OK;}int ListInsert(Sqlist &L,int i,ElemType e)            /*插入元素*/{    if(i<1|| i > L.length+1) printf("ERROR!");    if(L.length>=L.listsize)    {        ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)                                            *sizeof(ElemType));        if(!newbase)   return  OVERFLOW;// 当前存储空间已满        L.elem=newbase;        L.listsize+=LISTINCREASMENT;         /*表的容量不足分配内存*/    }    ElemType *q=&(L.elem[i-1]);    ElemType *p;    for(p=&(L.elem[L.length-1]); p>=q; --p)        *(p+1)=*p;    *q=e;    ++L.length;    return OK;}void ListDelete(Sqlist &L,int i,ElemType &e)           //删除线性表中第i个位置上的元素{    if(i<1||i>L.length) printf("ERROR!");    else    {        e=L.elem[i-1];        for(;i<L.length;i++)        {            L.elem[i-1]=L.elem[i];        }        L.length--;    }}ElemType GetElem(Sqlist &L,int i){    if(i<1||i>L.length) printf("ERROR!");    else    {        return L.elem[i-1];    }}int main(){    Sqlist L;    int t = 1 ,d;    SqInitial(L);    printf("构建长度为7的顺序表。\n");    for(t=1; t<=7; t++)                         /*构建长度为7的顺序表*/    {        printf("Please input the %dth list elem:",t);        scanf("%d",&d);        ListInsert(L,t,d);    }    printf("表长: %d\n",L.length);             /*输出表长*/    for(t=1; t<=L.length; t++)        printf("%d ",L.elem[t-1]);/*读表*/    printf("\n删除的位置:");                   //删除元素    scanf("%d",&t);    ListDelete(L,t,d);    printf( "删除元素的值:%d\n",d);    printf( "删除后的表:");    for(t=1; t<=L.length; t++)        printf("%d ",L.elem[t-1]);                 //删除后的表    printf("\n要插入的位置");                   //插入元素    scanf("%d", &t);    printf("要插入的值");    scanf("%d",&d);    ListInsert(L, t, d);    printf( "插入以后的表:");    for(t=1; t<=L.length; t++)                  //插入以后的表        printf("%d ",L.elem[t-1]);    printf("\n要检索的元素的位置:");            //检索元素    scanf("%d", &t);    d=GetElem(L, t);    printf( "该元素的值为:%d\n",d);    return 0;}
原创粉丝点击