一、数据结构基础之顺序表C语言实现

  1 /*
  2  * 一、数据结构基础之顺序表        
  3  * 顺序表数据结构(结构的定义+在此结构上的操作)
  4  * --- 2012年4月21日 ---by lee
  5  */ 
  6 
  7 #ifndef _SEQUENTIAL_LIST_H
  8 #define _SEQUENTIAL_LIST_H
  9 
 10 #include "Utility.h"
 11 
 12 //宏定义顺序表的空间大小
 13 #define LISTSIZE 20
 14 
 15 //类型定义
 16 typedef int DataType;
 17 
 18 //声明顺序表类型结构体
 19 typedef struct _SqList
 20 {
 21     DataType data[LISTSIZE];//存放数据元素的数组
 22     int length;//记录顺序表的实际长度
 23 } SqList;
 24 
 25 //对顺序表的基本操作
 26 void InitList(SqList* list);//初始化顺序表
 27 int GetLength(SqList* list);//获得当前顺序表的长度
 28 DataType  GetElement(SqList* list, int index);//返回表中位于位置index处的元素值(index从0到Length-1)
 29 void InsertElement(SqList* list, int index, DataType e);//在表中位置index处插入值为e的元素
 30 void DeleteElement(SqList* list, int index);//删除表中位置index处的元素
 31 void PrintList(SqList* list);//打印顺序表中的元素
 32 
 33 
 34 //初始化顺序表
 35 void InitList(SqList* list)
 36 {
 37     list->length=0;
 38 }
 39 
 40 //获得当前顺序表的长度
 41 int GetLength(SqList* list)
 42 {
 43     return list->length;
 44 }
 45 
 46 //返回表中位于位置index处的元素值(index从0到Length-1)
 47 DataType  GetElement(SqList* list, int index)
 48 {
 49     if((index < 0) || (index > list->length-1))
 50         Error("Array Index Out Of Bounds");
 51     return list->data[index];
 52 }
 53 
 54 //在表中位置index处插入值为e的元素(index从0到Length为合法位置)
 55 void InsertElement(SqList* list, int index, DataType e)
 56 {
 57     //检查插入位置是否合法
 58     if((index < 0) || (index > list->length))
 59         Error("Illegal Inserted Position");
 60     //检查表空间是否已满
 61     if(list->length >= LISTSIZE)
 62         Error("Array Space Is Full");
 63 
 64     //当在位置length处插入e时(即数组末尾下一位),无需移动任何元素
 65     //当在位置index处插入时(index<length),从index~length-1的元素全部后移一位
 66     for(int i=list->length-1; i>=index; i--)
 67     {
 68         list->data[i+1]=list->data[i];
 69     }
 70     //在位置index处插入元素e
 71     list->data[index]=e;
 72     //更新顺序表长度
 73     list->length++;
 74 }
 75 
 76 //删除表中位置index处的元素(index从0到Length-1)
 77 void DeleteElement(SqList* list, int index)
 78 {
 79     //检查删除位置是否合法
 80     if((index < 0) || (index > list->length-1))
 81         Error("Illegal deleted Position");
 82 
 83     //当在位置length-1处删除e时(即数组末尾),无需移动任何元素
 84     //当在位置index处删除时(index<length-1),从index+1~length-1的元素全部前移一位
 85     for(int i=index; i<list->length-1; i++)
 86     {
 87         list->data[i]=list->data[i+1];
 88     }
 89     //更新表长度
 90     list->length--;
 91 }
 92 
 93 //打印顺序表中的元素
 94 void PrintList(SqList* list)
 95 {
 96     for(int i=0; i<list->length; i++)
 97     {
 98         printf("%d\t",list->data[i]);
 99     }
100     printf("\n");
101 }
102 
103 #endif
104 
105 //测试代码
106 /*
107     SqList* list=(SqList*)malloc(sizeof(SqList));
108     InitList(list);
109     InsertElement(list,0,1);
110     InsertElement(list,1,2);
111     InsertElement(list,2,3);
112     InsertElement(list,3,4);
113     InsertElement(list,4,5);
114     InsertElement(list,5,6);
115     PrintList(list);
116     DeleteElement(list,3);
117     PrintList(list);
118     printf("%d\n",GetElement(list,1));
119     DeleteElement(list,6);
120 */
posted @ 2012-05-05 20:53  Thinking.Lee  阅读(695)  评论(0编辑  收藏  举报