顺序表的操作

 1 //代码来自浙大数据结构的讲义
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define  MAXSIZE 10
 5 
 6 typedef struct {
 7     ElementType Data[MAXSIZE];
 8     int last;  //这里的last代表,顺序表最后一个元素的下标,若有n个元素,其值为n-1.  MAXSIZE代表表的最大容量.
 9 }List;    //定义了一种类型
10 List L, *ptrL;    //这种记法省下了struct
11 
12 
13 //访问下标为i的元素(i从0开始)
14 L.Data[i];
15 ptrL->Data[i];
16 
17 
18 //////////////////////////////////////////////////////////////////////////
19 //主要操作实现
20 //////////////////////////////////////////////////////////////////////////
21 
22 
23 //1.初始化,建立空表
24 List *MakeEmpty()
25 {
26     List *ptrL;
27     ptrL = (List *)malloc(sizeof(List));// 需要带上(List *),类似于 ptrL = new List[sizeof(List)];  malloc需要加stdlib.h
28     ptrL->last = -1;                    //sizeof判断类型或者变量的长度.
29     return ptrL;    //相当于该顺序表的入口
30 }
31 
32 //2.查找
33 int Find(ElementType X, List *ptrL)
34 {
35     int i = 0;
36     while (i <= ptrL->last && ptrL->Data[i] != X) //必须在数组里且未找到X时,可以i++
37     {
38         i++;
39     }
40     if (i > ptrL->last)//说明到最后一位也没有找到x;如果最后一位找到X的话,i不会再增加
41     {
42         return -1;    //代表没找到
43     }
44     else
45         return i;
46 }
47 
48 //3.插入操作  其后的元素先往后移动,后插入   i<= i <= n+1  最后一个元素位置的后一个是n+1处.
49 void Insert(ElementType X, int i, List *ptrL)
50 {
51     if (ptrL->last == MAXSIZE - 1)
52     {
53         printf("表满");
54         return;                        //要有return
55     }
56     if (i < 1 || i > ptrL->last + 2)
57     {
58         printf("位置不合法");
59         return;
60     }
61     for (int j = ptrL->last; j >= i - 1; j--)//j >= i - 1   第i个位置的下标为i-1
62     {
63         ptrL->Data[j + 1] = ptrL->Data[j];
64     }
65     ptrL->Data[i - 1] = X;
66     ptrL->last++;    //last仍然要指向最后元素
67     return;  //这里的return无所谓的.
68 }
69 
70 //4.删除操作    i<= i <= n
71 void Delete(int i, List *ptrL)
72 {
73     if (ptrL->last == 0)
74     {
75         printf("表为空,无法删除");
76         return;
77     }
78     if (i < 1|| i > ptrL->last + 1)
79     {
80         printf("位置不合法");
81         return;
82     }
83     for (int j = i - 1; j <= ptrL->last; j++)  //第i个位置的下标为i-1
84     {
85         ptrL->Data[j] = ptrL->Data[j + 1];        //ptrL是指向List的指针
86     }
87     ptrL->last--;
88 }

 

posted @ 2017-08-28 10:23  心媛意码  阅读(206)  评论(0编辑  收藏  举报