线性表实验

#include <stdlib.h>
#include <stdio.h>
#define  TRUE           1 
#define  FALSE          0
#define  OK             1
#define  ERROR          0
#define  INFEASIBLE     -1
#define  OVERFLOW       -2     
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10
typedef  int  Status;
typedef  int  ElemType;
typedef struct
{
  ElemType *elem;
  int length;
  int listsize;
}SqList;           
Status InitList(SqList &L)  
{
  L.elem=(ElemType *) malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if (!L.elem)
    exit(OVERFLOW);
  L.length=0;
  L.listsize=LIST_INIT_SIZE;
  return OK;
}
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{
    ElemType *newbase,*p,*q;
    if (i<1||i>L.length+1) return ERROR;
    if (L.length>=L.listsize)
    {
    newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)) ;
    if  (!newbase) exit (OVERFLOW);
    L.elem = newbase;
    L.listsize=L.listsize+LISTINCREMENT;
    }
    q=&(L.elem[i-1]);
    for (p=&(L.elem[L.length-1]);p>=q; --p) *(p+1)=*p;
    *q=e;
    L.length++;
    return OK;

Status ListDelete_Sq(SqList &L, int i, ElemType &e)

    ElemType *p,*q;
    if ((i<1)||i>L.length) return ERROR;
    p=&L.elem[i-1];
    e=*p;
    q=L.elem+L.length-1;
    for (++p; p<=q; ++p)     
    *(p-1)=*p;
    --L.length; 
    return OK;
}
Status LocateElem(SqList L,ElemType x)
{
    int i;
    for(;i<L.length;++i){
        if(L.elem[i] == x)
        return i + 1;
    }
    return 0;
}
Status PrintList(SqList L)
{
    int i;
    printf("The list is \n");
    for(i = 0;i < L.length;++i)
        printf("%5d",L.elem[i]);
    printf("\n");
    return 0;
}
int main()
{
    SqList L;
    int n,i;
    ElemType e;
    InitList(L);
    for(i = 0;i < 5;++ i)
    {
        L.elem[i] = i + 1;
    }
    L.length = 5;
    PrintList(L);
    ListInsert_Sq(L,2,3);
    PrintList(L);
    printf("Location is %d\n",LocateElem(L,4));
    ListDelete_Sq(L,1,e);
    PrintList(L);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值