一、定义
顺序表是指用一组地址连续的存储单位依次存储数据,特点是,逻辑上相邻的数据,在物理上也是相邻的。 其次,顺序表的顺序是按大小排列且不变的,就像班级里的学号,按姓名排列一直不变的。如果插入一个元素,则插在合适的位置,该位置之前的顺序不变,该位置后面的元素下标加1,如果删除一个元素,该元素前面的元素不变,后面元素的下标减1.
二、代码实现
#include<stdio.h>
#define MAX 10
struct data{
int num[MAX];
int last;
};
int insert_data(int temp,struct data *p){
int i,j;
if(p->last==MAX-1)
return -1;
else if(p->last==-1){
p->last++;
p->num[p->last] = temp;
return 1;
}else{
for(i=0;i<=p->last;i++){
if(p->num[i]>temp){
break;
}
}
for(j = p->last+1;j>i;j--){
p->num[j] = p->num[j-1];
}
p->num[i] = temp;
p->last++;
return 1;
}
}
void show_data(struct data *p){
int i;
for(i = 0;i<=p->last;i++){
printf("%d\t",p->num[i]);
}
printf("\n");
}
int delete_data(int temp,struct data *p){
int i;
if(p->last==-1){
return -1;
}else{
for(i=0;i<=p->last;i++){
if(temp == p->num[i])
break;
}
if(i==(p->last+1)){
return -1;
}
for(i;i<p->last;i++){
p->num[i] = p->num[i+1];
}
p->last--;
return 1;
}
}
int main(){
struct data d1;
int temp;
struct data *p;
p = &d1;
p->last = -1;
while(1){
scanf("%d",&temp);
getchar();
if(temp>0){
if(insert_data(temp,p)==1){
show_data(p);
}else{
printf("已经存满!\n");
break;
}
}else if(temp<0){
if(delete_data(-temp,p)==1){
show_data(p);
}else {
printf("不存在!\n");
}
}else{
break;
}
}
show_data(p);
return 0;
}
|