概述
今天就谈谈数据结构中的顺序表的代码实现中的小细节(算是编程的一种思路),对我而言,编程的语法,规则...=除了这些,我认为还很重要的就是编程的思路!有一个清晰的思路对编程的进程就加上了推进器。
好了,不多bb,直接上代码:
1 #include<stdio.h>//顺序表的练习
2 #include<stdlib.h>
3 #include<time.h>
4 #define MY_SUCCEED 1
5 #define MY_FAILED 2
6 #define MY_EXIST 3
7 #define MY_NOEXIST 4
8 #define MY_EMPTY 5
9 #define MY_NOEMPTY 6
10 #define MY_FULL 7
11 #define MY_NOFULL 8
12 #define MY_ILL_POS 9
13 int myerrno;
14 int len;
15 void my_perror(void)
16 {
17 switch(myerrno)
18 {
19 case MY_SUCCEED:
20 printf("Info:操作成功n");
21 break;
22 case MY_FAILED:
23 printf("Info:操作失败n");
24 break;
25 case MY_EXIST:
26 printf("Info:顺序表存在n");
27 break;
28 case MY_NOEXIST:
29 printf("Info:顺序表不存在n");
30 break;
31 case MY_EMPTY:
32 printf("Info:顺序表空的n");
33 break;
34 case MY_NOEMPTY:
35 printf("Info:顺序表不是空的n");
36 case MY_ILL_POS:
37 printf("Info:输入的pos值非法n");
38 break;
39 case MY_FULL:
40 printf("Info:表是满的啦n");
41 break;
42 case MY_NOFULL:
43 printf("Info:表不是满的n");
44 defalut:
45 printf("Info:未知错误n");
46 }
47 }
48 typedef int datatype;
49 typedef struct list
50 {
51 int last;//位置下标
52 datatype data[0];//这是一个动态数组,要申请空间来给data[0]这个数组
53
54 }sqlite_t;
55
56 int seq_create(sqlite_t **q, int len)
57 {
58 *q = malloc(sizeof(int) + sizeof(datatype)*len);//申请顺序表结构体空间
59 if(*q == NULL)
60 {
61 return MY_FAILED;
62 }
63 //初始化
64 (*q)->last = -1;
65 return MY_SUCCEED;
66 }
67 int seq_insert_end(sqlite_t *q,datatype value)
68 {
69 myerrno = seql_full(q);
70 if(myerrno == MY_FULL)
71 {
72 return myerrno;
73 }
74 q->data[q->last+1] = value;
75 q->last++;
76 return MY_SUCCEED;
77 }
78 int seql_full(sqlite_t *q)
79 {
80 //判断满的条件(判断是否存在)
81 myerrno = seql_exist(q);
82 if(MY_EXIST != myerrno)
83 {
84 return myerrno;
85 }
86 return (q->last == len - 1)?MY_FULL:MY_NOFULL;
87 }
88 int seql_exist(sqlite_t *q)
89 {
90 return (NULL == q)?MY_NOEXIST:MY_EXIST;
91 }
92 int seq_printf(sqlite_t *q,int len)
93 {
94 int i = 0;
95 for(i = 0;i <= q->last;i++)
96 {
97 printf("%d ",q->data[i]);
98 }
99 printf("n");
100 return MY_SUCCEED;
101 }
102 int seq_delete(sqlite_t *q)
103 {
104 q->last–;
105 }
106 int seq_insert_mid(sqlite_t *q,int pos,datatype value)
107 {
108 int i = q->last;
109 for(i = q->last;i > pos; i–)
110 {
111 if(i != pos)
112 {
113 q->data[i+1] = q->data[i];
114 }
115 }
116 q->data[pos] = value;
117 q->last++;
118 return MY_SUCCEED;
119 }
120 int main(int argc, const char *argv[])
121 {
122 len = 10;
123 printf("=开始创建顺序表=n");
124 sqlite_t *q = NULL;
125 myerrno = seq_create(&q, len);
126 if(myerrno == MY_SUCCEED)
127 {
128 printf("=顺序表创建成功===n");
129 }
130 else
131 {
132 printf("=顺序表创建失败===n");
133 }
134
135 int i = 0;
136 datatype temp = 0;
137 srand(time(NULL));
138 for(i = 0;i < 100;i++)
139 {
140 temp = rand()%100;
141 myerrno = seq_insert_end(q,temp);
142 if(myerrno != MY_SUCCEED)
143 {
144 my_perror();
145 printf(“插入数据失败n”);
146 break;
147 }
148 else
149 {
150 printf(“No.%d插入数据%d成功n”,i,temp);
151 }
152 }
153 myerrno = seq_printf(q,len);
154 if(myerrno == MY_SUCCEED)
155 {
156 printf("=打印顺序表成功=n");
157 }
158 else
159 {
160 my_perror();
161 printf("=打印数据表失败=n");
162 }
163 seq_delete(q);
164 seq_printf(q,len);
165 myerrno = seq_insert_mid(q,2,120);
166 if(myerrno == MY_SUCCEED)
167 {
168 printf("=中间插入成功=n");
169 }
170 else
171 {
172 printf("=中间插入失败=n");
173 }
174 seq_printf(q,len);
175 return 0;
176 }
这是我还没完成的顺序表代码的实现.但是不影响我写的内容。在我初学C语言的时候就遇见了用代码实现数据的中间插入(数组)。那时候简单的思路就是用数组A[]复制你插入位置后面的所有数据,再用数组B[]将插入数据以前的(包括插入的数据)一起复制,再将这两个数组一起赋值给第三个数组C[]。不得不说这是一个笨方法。在学会指针后,用指针的方法访问数据的地址,实现数据的搬运。这就是我想说的“思路”。(我是一个初学者,写这些是增强我的印象,有认为我不对的,谢绝访问)好了,进入正题:中间插入数据的方式我们往往会有疑问,怎么将数据插入,而后面的数据还能自动向后移。ok—>>>那就是,自己先定义一个指针,指向我们的最后一个数据,让最后一个数据开始向后一个位置移动,倒数第二个数据移到最后一个位置,倒数第三个移动到倒数第二个位置…以此类推。。。说起来简单,代码有该怎么写呢!》》》》来,翠花,上酸菜1
int seq_insert_mid(sqlite_t *q,int pos,datatype value)
107 {
108 int i = q->last;//q->last就是子最后的位置
109 for(i = q->last;i > pos; i–)
110 {
111 if(i != pos)//pos就是我们插入的位置
112 {
113 q->data[i+1] = q->data[i];//数据开始搬运
114 }
115 }
116 q->data[pos] = value;//value是插入的值
117 q->last++;
118 return MY_SUCCEED;
119 }
ok.今天就分享到这!
最后
以上就是幽默小懒虫为你收集整理的C语言中的数据插入的方法思路的全部内容,希望文章能够帮你解决C语言中的数据插入的方法思路所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复