typedefs.h:

 

  1. #define OK 1    
  2. #define ERROR 0    
  3. #define INFEASIBLE -1    
  4. #define OVERFLOW -2   
  5.  
  6. typedef int Status; 
  7. typedef enum  
  8.     FALSE, 
  9.     TRUE 
  10. }BOOL; 

顺序表定义:

  1.  
  2. #include "stdio.h"    
  3. #define TRUE 1    
  4. #define FALSE 0    
  5. #define OK 1    
  6. #define ERROR 0    
  7. #define INFEASIBLE -1    
  8. #define OVERFLOW -2    
  9.  
  10. #define LIST_INIT_SIZE 100    
  11. #define LISTINCREMENT 10    
  12. typedef int Status;    
  13. typedef int ElemType;    
  14. typedef struct{    
  15.     ElemType *elem;    
  16.     int length;    
  17.     int listsize;    
  18. }SqList;    
  19.  
  20. /*初始化线性表*/    
  21. Status InitList_Sq(SqList *L){    
  22.     L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));    
  23.     if (!L->elem) 
  24.        exit(OVERFLOW);    
  25.     L->length=0;    
  26.     L->listsize=LIST_INIT_SIZE;    
  27.     return OK;    
  28. }    
  29.  
  30. /*插入操作*/    
  31. Status ListInsert_Sq(SqList *L,int i,ElemType e){    
  32.     ElemType *q,*p,*newbase;    
  33.     if (i<1||i>L->length+1) return ERROR;  /*i范围[1,n+1 ]*/ 
  34.     if (L->length>=L->listsize){   
  35.         /*重新申请空间*/                             
  36.         newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));    
  37.         if (!newbase) 
  38.            exit(OVERFLOW);    
  39.         L->elem=newbase;    
  40.         L->listsize+=LISTINCREMENT;    
  41.     }    
  42.     q=&(L->elem[i-1]);  
  43.      
  44.     /*后移第i到n个元素*/   
  45.     for(p=&(L->elem[L->length-1]);p>=q;--p)  
  46.         *(p+1)=*p;    
  47.     *q=e;    
  48.     ++L->length;    
  49.     return OK;    
  50. }    
  51.  
  52. /*删除元素*/    
  53. Status ListDelete_Sq(SqList *L,int i,ElemType *e){    
  54.     ElemType *p,*q;    
  55.     if ((i<1)||(i>L->length))  
  56.        return ERROR;    
  57.     p=&(L->elem[i-1]);    
  58.     *e=*p;    
  59.     q=(L->elem+L->length-1);    
  60.     for (++p;p!=q;++p)  
  61.         *(p-1)=*p;    
  62.     --L->length;    
  63.     return OK;    
  64. }    
  65.  
  66.  
    1. /*清空线性表*/ 
    2. void ClearList_Sq(SqList *L) 
    3.      L->length=0;     
    4. }  
    5.  
    6. /*线性表判空*/ 
    7. BOOL ListEmpty_Sq(SqList *L) 
    8.      return L->length==0?TRUE:FALSE;      
    9.  
    10. /*返回线性表长度*/  
    11. int ListLength(SqList *L) 
    12.     return L->length; 
    13. }  
    14.  
    15. /*获取线性表第i个元素*/  
    16. Status GetElem_Sq(SqList *L,int i,ElemType *elem) 
    17.     if(i<1 || i>L->length) 
    18.         return OVERFLOW; 
    19.     *elem=L->elem[i-1]; 
    20.     return OK;                                         
  67.     
  68. int main(int argc,char* argv[]){    
  69.     SqList Lst;    
  70.     int i,n=10;    
  71.     ElemType e;    
  72.     if (InitList_Sq(&Lst)==OK){    
  73.         for(i=1;i<=n;i++)    
  74.             if(ListInsert_Sq(&Lst,i,(ElemType)i)!=OK) break;    
  75.         printf("\n");    
  76.         for (i=0;i<Lst.length;i++)    
  77.             printf("i,e=%d,%d\n",i,Lst.elem[i]);    
  78.         getch();    
  79.         if (ListDelete_Sq(&Lst,5,&e)==OK){    
  80.             printf("delete_elem=%d\n",(int)e);    
  81.             getch();    
  82.             for (i=0;i<Lst.length;i++)    
  83.                 printf("i,e=%d,%d\n",i,Lst.elem[i]);    
  84.         }    
  85.     } 
  86.     getch();  
  87.     return 0;