顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表

C:数据结构与算法之顺序表-LMLPHP
/* Note:Your choice is C IDE */
#include "stdio.h"
#define MAXSIZE 100
typedef struct /*结构体的格式*/
{
int data[MAXSIZE];
int last;
}Seqlist; /*顺序表的名称*/
C:数据结构与算法之顺序表-LMLPHP

定义在主函数定义一个指向这个顺序表的指针:Seqlist L*;然后定义一个函数来初始化这个顺序表,初始化即构造一个空表,将L设为指针参数,动态分配空间。初始化函数代码如下:

C:数据结构与算法之顺序表-LMLPHP
Seqlist *init()
{
Seqlist *L;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
return L;
}
C:数据结构与算法之顺序表-LMLPHP

一切预备工作已经做好了,这个last表示此表中最后一个的位置,L->data[0]~L->data[L->last]就是所有数据的长度,现在要创建一个可以手动输入你想要的数据到顺序表里面的函数,设这个函数名为intsert();

C:数据结构与算法之顺序表-LMLPHP
intsert(Seqlist *L,int i,int x)
{
int j;
for(j=L->last;j>=i-1;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
return 1;
}
C:数据结构与算法之顺序表-LMLPHP

如果你想要输入8个数据到顺序表,与主函数联合起来,代码如下:

C:数据结构与算法之顺序表-LMLPHP
/* Note:Your choice is C IDE */
#include "stdio.h"
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int last;
}Seqlist;
Seqlist *init();
insert(Seqlist *L,int i,int x);
main()
{
int x,i;
Seqlist *L;
L=init();
for(i=1;i<=8;i++)
{
scanf("%d",&x);
insert(L,i,x);
}
printf("写入成功!");
}
insert(Seqlist *L,int i,int x)
{
int j;
for(j=L->last;j>=i-1;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++; }
Seqlist *init()
{
Seqlist *L;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
return L;
}
C:数据结构与算法之顺序表-LMLPHP

我们可以输入,但是不知道有没有输入成功,可以写个输出的函数:

C:数据结构与算法之顺序表-LMLPHP
void print(Seqlist *L)/*输出函数*/
{
int i;
if(L->last==-1)
printf("null!!");
else
{
for(i=0;i<=L->last;i++)
printf("| %d",L->data[i]);
}
C:数据结构与算法之顺序表-LMLPHP

同样的还有删除顺序表任意元素的函数:

C:数据结构与算法之顺序表-LMLPHP
int Delete(Seqlist *L,int i)
{
int j;
if(i<1||i>L->last+1)
{
printf("不存在第i个元素!");
return 0;
}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
}
C:数据结构与算法之顺序表-LMLPHP

查看任意元素的位置并返回位置:

C:数据结构与算法之顺序表-LMLPHP
Location(Seqlist *L,int x)
{
int i=0;
while(i<=L->last&&L->data[i]!=x)
i++;
if(i++>L->last)
return -1;
else
return i;
}
C:数据结构与算法之顺序表-LMLPHP

选择在哪个位置增加函数并不破坏顺序表:

C:数据结构与算法之顺序表-LMLPHP
add(Seqlist *L,int x,int i)
{
int j;
if(i>L->last+1)
printf("超出范围!");
else
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
}
C:数据结构与算法之顺序表-LMLPHP

在某个位置修改元素,当然你得输入你想修改的位置和新元素:

int change(Seqlist *L,int a,int b)
{
L->data[a-1]=b;
}

这么多函数连用在一起就是一个完整的顺序表了,这里我用一个比较直观的方式体现出顺序表,把它设计成一个这样:aaarticlea/png;base64,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" alt="" />,并且当你按1你就可以输入你想增加的元素,按5就可以打印出顺序表。

代码如下:

C:数据结构与算法之顺序表-LMLPHP
  1 /* Note:Your choice is C IDE */
2 #include "stdio.h"
3 #define MAXSIZE 100
4 typedef struct
5 {
6 int data[MAXSIZE];
7 int last;
8 }Seqlist;
9 Seqlist *init();
10 void print(Seqlist *L);
11 insert(Seqlist *L,int i,int x);
12 int Delete(Seqlist *L,int i);
13 void showMainWindows();
14 int change(Seqlist *L,int a,int b);
15 Location(Seqlist *L,int x);
16 add(Seqlist *L,int x,int i);
17 function(int x);
18 main()
19 {
20 int x,i;
21 Seqlist *L;
22 L=init();
23 printf("首先你得先输入8个数据!\n");
24 for(i=1;i<9;i++)
25 {
26 scanf("%d",&x);
27 insert(L,i,x);
28 }
29 system("cls");
30 printf("写入成功,请继续使用顺序表!");
31 showMainWindows();
32
33 while(1)
34 {
35 int num;
36 scanf("%d",&num);
37 function(num);
38 if(num==1)
39 {
40 int a,b;
41 scanf("%d,%d",&a,&b);
42 add(L,a,b);
43 }
44 else
45 if(num==2)
46 {
47 int a,b;
48 scanf("%d,%d",&a,&b);
49 change(L,a,b);
50 }
51 else
52 if(num==3)
53 {
54 int de;
55 scanf("%d",&de);
56 Delete(L,de);
57 }
58 else
59 if(num==4)
60 {
61 int y;
62 scanf("%d",&y);
63 printf("此元素在第%d",Location(L,y));
64 }
65 else
66 if(num==5)
67 print(L);
68 if(num==0)
69 break;
70 }
71
72 }
73 Seqlist *init()
74 {
75 Seqlist *L;
76 L=(Seqlist *)malloc(sizeof(Seqlist));
77 L->last=-1;
78 return L;
79 }
80 void print(Seqlist *L)
81 {
82 int i;
83 if(L->last==-1)
84 printf("null!!");
85 else
86 {
87 for(i=0;i<=L->last;i++)
88 printf("| %d ",L->data[i]);
89 printf("请继续输入0~5之间的数:\n");
90 }
91 }
92 insert(Seqlist *L,int i,int x)
93 {
94 int j;
95 for(j=L->last;j>=i-1;j++)
96 L->data[j+1]=L->data[j];
97 L->data[i-1]=x;
98 L->last++;
99
100 }
101 int Delete(Seqlist *L,int i)
102 {
103 int j;
104 if(i<1||i>L->last+1)
105 {
106 printf("不存在第i个元素!\n");
107 return 0;
108 }
109 for(j=i;j<=L->last;j++)
110 L->data[j-1]=L->data[j];
111 L->last--;
112 printf("删除成功,查看请按5!\n");
113 }
114 void showMainWindows()
115 {
116 printf("\n\n\t+------------------------------------------------------+\n");
117 printf("\t| 顺序表练习 |\n");
118 printf("\t+------------------------------------------------------+\n");
119 printf("\t|------------------- 1.增 加 -----------------------|\n");
120 printf("\t|------------------- 2.修 改 -----------------------|\n");
121 printf("\t|------------------- 3.删 除 -----------------------|\n");
122 printf("\t|------------------- 4.查 找 -----------------------|\n");
123 printf("\t|------------------- 5.打 印 表-----------------------|\n");
124 printf("\t|------------------- 0.退出系统 -----------------------|\n");
125 printf("\t+------------------------------------------------------+\n");
126 printf("\t| 请输入您的选择(0-5) |\n");
127 printf("\t+------------------------------------------------------+\n");
128 printf("\n\n");
129 }
130 int change(Seqlist *L,int a,int b)
131 {
132 L->data[a-1]=b;
133 printf("修改成功,查看请按5!\n");
134 }
135 Location(Seqlist *L,int x)
136 {
137 int i=0;
138 while(i<=L->last&&L->data[i]!=x)
139 i++;
140 if(i++>L->last)
141 return -1;
142 else
143 return i;
144 }
145 add(Seqlist *L,int x,int i)
146 {
147 int j;
148 if(i>L->last+1)
149 printf("超出范围!或格式不对!请你继续输入0~5之间的数!\n");
150 else
151 for(j=L->last;j>=i-1;j--)
152 L->data[j+1]=L->data[j];
153 L->data[i-1]=x;
154 }
155 function(int x)
156 {
157 switch(x)
158 {
159 case 1:printf("请输入你要增加的元素和位置:");
160 break;
161 case 2:printf("请输入你要修改元素的位置和新元素:");
162 break;
163 case 3:printf("请输入你要删除的元素位置:");
164 break;
165 case 4:printf("请输入你要查找的元素并返回其位置:");
166 break;
167 case 5:printf(" 打印出顺序表:");
168 }
169 }
C:数据结构与算法之顺序表-LMLPHP

这就是我自己写的一个比较完整的顺序表,当然这里面都是int类型,比较简单而且容易理解。

04-11 18:28