线性结构的一些基本操作

View Code
  1 //话说像这样纯数据结构的题目是是最不讨人喜欢的了,但人在的无聊的时候真是太可怕了
2 /*
3 时间:
4 2012年4月3日 19:08:58
5 目的:
6 数据结构练习题——线性表操作
7 题目:
8 请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、
9 “清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。
10 本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。
11
12 输入:
13 各个命令以及相关数据,它们对应的格式如下:
14 在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,
15 每行数据有两个值,分别代表位置与插入的元素值
16 清除线性表:clear
17 获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
18 删除某个位置的元素:delete,接下来一行是被删除的元素位置
19 当输入的命令为exit时,程序结束
20 输出:
21 当输入的命令为getelem时,请输出获取的元素值,
22 当输入的命令是delete时,请输出被删除的那个元素值
23 注意,所有的元素均占一行
24 样例输入:
25 insert
26 2
27 1 1
28 2 2
29 delete
30 1
31 clear
32 insert
33 2
34 1 3
35 2 4
36 getelem
37 2
38 exit
39 样例输出:
40 1
41 4
42 */
43
44 #include<stdio.h>
45 #include<string.h>
46 #include<stdlib.h>
47
48 #define MAX 1001
49
50 typedef struct data
51 {
52 int array[MAX];
53 int len;
54 }Sq;
55
56 Sq st;
57
58 int main()
59 {
60 void insert(Sq *st,int a,int b);
61 void clear(Sq *st);
62 void getelem(Sq * st,int val);
63 int _delete(Sq * st , int val,int *a);
64
65 char a[10];
66
67 clear(&st);
68
69 memset(a,0,sizeof(a));
70
71 scanf("%s",a);
72
73 while(strcmp(a,"exit")!=0)
74 {
75 if(0==strcmp(a,"insert"))
76 {
77 int n,a,b;
78 scanf("%d",&n);
79 while(n--)
80 {
81 scanf("%d%d",&a,&b);
82 insert(&st,a,b);
83 }
84 }
85 else if(0==strcmp(a,"delete"))
86 {
87 int n,a;
88 scanf("%d",&n);
89 if(_delete(&st,n,&a)==1)
90 printf("%d\n",a);
91
92 }
93 else if(0==strcmp(a,"clear"))
94 clear(&st);
95 else if(0==strcmp(a,"getelem"))
96 {
97 int n;
98 scanf("%d",&n);
99 getelem(&st,n);
100 }
101 memset(a,0,sizeof(a));
102 scanf("%s",a);
103 }
104 return 0;
105
106 }
107
108 void insert(Sq * st,int a,int b)
109 {
110 int i;
111
112 for(i=st->len;i>=a;i--)
113 st->array[i+1]=st->array[i];
114 st->array[a]=b;
115
116 st->len++;
117 }
118 void clear(Sq * st)
119 {
120 st->len=0;
121 }
122 void getelem(Sq * st,int val)
123 {
124 printf("%d\n",st->array[val]);
125 }
126
127 int _delete(Sq * st , int val,int *a)
128 {
129 int i;
130
131 if(val<1 || val > st->len)
132 return 0;
133 *a=st->array[val];
134 for(i=val+1;i<=st->len;i++)
135 st->array[i-1]=st->array[i];
136 st->len--;
137
138 return 1;
139
140 }
141
142 /*
143 总结:
144 线性结构的一些基本操作
145 */
原文地址:https://www.cnblogs.com/deosky/p/2431764.html