首页 > 其他 > 详细

顺序表的实现

时间:2021-06-11 01:15:29      阅读:31      评论:0      收藏:0      [点我收藏+]
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #define MaxSize 100
  4 /*
  5 
  6 
  7     struct SqList sq;
  8     struct SqList* p_sq = &sq;
  9     p_sq->length = 0;
 10 
 11     struct SqList sq;
 12     struct SqList* p_sq = &sq;
 13     p_sq = malloc(sizeof(struct SqList));
 14     p_sq->length = 0;
 15 
 16 
 17 第一段代码 p_sq 指向 sq,因此 p_sq->length 就是 sq.length;
 18 第二段代码 p_sq 指向一个新分配的内存,p_sq->length 不是 sq.length,sq.length 没有被初始化或赋值。
 19 
 20 */
 21 typedef int Elemtype;
 22 typedef struct SqList
 23 {
 24     Elemtype data[MaxSize];
 25     int length; //顺序表的长度
 26 };
 27 void Init__List(struct SqList *sq);//初始化顺序表
 28 int Length__List(struct SqList sq);//求顺序表的长度
 29 Elemtype Get__List(struct SqList sq, int index);//获取第index个元素,index>0
 30 int Locate__List(struct SqList sq, int value);//获取值为value的下标,下标>0
 31 void Insert__List(struct SqList *sq, int index, int value);//插入第index位置,值为value,index>0
 32 void Delete__List(struct SqList *sq, int index);//删除第index个位置的值,index>0
 33 void ShowSqList(struct SqList sq);//展示顺序表
 34 int main(void)
 35 {
 36 
 37     struct SqList sq;
 38     Init__List(&sq);
 39     printf("线性表的长度是%d\n", sq.length);
 40     for (int i = 1; i <= 101; i++)
 41     {
 42         Insert__List(&sq, i, i * 1000);
 43     }
 44     ShowSqList(sq);
 45     // printf("-------------------------\n");
 46     // Delete__List(&sq,1);
 47     // ShowSqList(sq);
 48     // printf("-------------------------\n");
 49     // Delete__List(&sq,10);
 50     // ShowSqList(sq);
 51 
 52     // printf("顺序表的长度是:%d\n",Length__List(sq));
 53     // printf("-------------------------\n");
 54     // for(int i=0;i<sq.length;i++){
 55     //     printf("第%d个元素是%d\n",i+1,sq.data[i]);
 56     // }
 57     system("pause");
 58     return 0;
 59 }
 60 
 61 void Init__List(struct SqList *sq)
 62 {
 63     //sq = (struct SqList *)malloc(sizeof(struct SqList));
 64     sq->length = 0;
 65 }
 66 
 67 //求顺序表的长度
 68 int Length__List(struct SqList sq)
 69 {
 70 
 71     return sq.length;
 72 }
 73 /*
 74 返回线性表L中的第i个元素的值或地址
 75 */
 76 Elemtype Get__List(struct SqList sq, int index)
 77 {
 78     if (index <= 0 || index > sq.length)
 79     {
 80         return -1; //-1表示不存在
 81     }
 82 
 83     return sq.data[index - 1];
 84 }
 85 
 86 int Locate__List(struct SqList sq, int value)
 87 {
 88     for (int i = 1; i <= sq.length; i++)
 89     {
 90         if (sq.data[i - 1] == value)
 91         {
 92             return i - 1;
 93         }
 94     }
 95 
 96     return -1;
 97 }
 98 void Insert__List(struct SqList *sq, int index, int value)
 99 {
100     if (index <= 0 || index > sq->length + 1)
101     {
102         printf("插入的位置错误\n");
103         return;
104     }
105 
106     if (sq->length == MaxSize)
107     {
108         printf("空间已满\n");
109         return;
110     }
111     for (int i = sq->length - 1; i >= index - 1; i--)
112     {
113         sq->data[i + 1] = sq->data[i];
114     }
115     sq->data[index - 1] = value;
116     sq->length++;
117 }
118 
119 void Delete__List(struct SqList *sq, int index)
120 {
121     if (index <= 0 || index > sq->length)
122     {
123         printf("删除的位置错误\n");
124         return;
125     }
126 
127     for (int i = index - 1; i < sq->length; i++)
128     {
129         sq->data[i] = sq->data[i + 1];
130     }
131 
132     sq->length--;
133 }
134 
135 void ShowSqList(struct SqList sq)
136 {
137     for (int i = 0; i < sq.length; i++)
138     {
139         printf("%d\n", sq.data[i]);
140     }
141 }

 

顺序表的实现

原文:https://www.cnblogs.com/Knightl8/p/14872621.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!