动态顺序表

 1 #include <cstdio>
 2 #include <conio.h>
 3 #include <windows.h>
 4 #define MaxSize 10
 5 typedef int ElemType;   //把int定义为ElemType
 6 typedef struct
 7 {
 8    int *elem;
 9    int length;
10    int listsize;   
11 }Sqlist;
12 
13 void initSqlist(Sqlist *L)
14 {
15    L->elem=(int*)malloc(MaxSize*sizeof(ElemType));
16    if(!L->elem)   exit(0);
17    L->length=0;            //当前长度 
18    L->listsize=MaxSize;    //最大长度 
19 }
20 
21 void InsertElem(Sqlist *L,int i,ElemType item)  //i:插入位置,item:元素 
22 {
23    ElemType *base,*insertPtr,*p;
24    if(i<1 || i>L->length+1)   exit(0);
25    if(L->length>=L->listsize)
26       {
27          base=(ElemType*)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
28          L->elem=base;
29          L->listsize=L->listsize+10;   
30       }
31    insertPtr=&(L->elem[i-1]);
32    for(p=&(L->elem[L->length-1]);p>=insertPtr;p--)
33       *(p+1)=*p;
34    *insertPtr=item;
35    L->length++;   
36 }
37 
38 void DelElem(Sqlist *L,int i)
39 {
40    ElemType *delItem,*q;
41    if(i<1 || i>L->length)  exit(0);
42    delItem=&(L->elem[i-1]);
43    q=L->elem+L->length-1;
44    for(++delItem;delItem<=q;++delItem)
45       *(delItem-1)=*delItem;
46    L->length--;   
47 }
48 int main()
49 {
50    Sqlist l;
51    int i;
52    initSqlist(&l);   //初始化顺序表 
53    for(i=0;i<15;i++)
54       InsertElem(&l,i+1,i+1);    //向顺序表中插入1~15 
55    printf("\nThe content of the list is\n");
56    for(i=0;i<l.length;i++)
57       printf("%d ",l.elem[i]);
58       
59    DelElem(&l,5);    //删除第5个元素 
60    printf("\nDelete the fifth element\n");
61    for(i=0;i<l.length;i++)
62       printf("%d ",l.elem[i]);
63       
64    system("pause");
65    return 0;   
66 }

 

posted @ 2013-06-10 14:25  瓶哥  Views(166)  Comments(0Edit  收藏  举报