在数据结构中顺序表属于顺序结构,和链表并列。对顺序表的操作一般有,创建顺序表、遍历顺序表、插入元素在顺序表中、删除某元素以及查找某元素在顺序表中的位置。当然链表也有这些操作,但是相对链表我认为顺序表这些基本操作更容易实现,但是牺牲了程序的时间和空间。
以下本人以一个完整的程序来说明实现顺序表中的一些操作(主要是插入和删除),程序写得相对简单没有考虑程序的健壮性。
#include<stdio.h>
#include<stdlib.h>
#define SIZE 15 //顺序表长
int Array[SIZE];//顺序表
int length=0; //存放顺序表的实际表长
void InList(int i){ //给顺序表中赋值
int n=0;
length=i;
while(n<i){
scanf("%d",&Array[n]);
++n;
}
}
void InsertList(int j,int data){//插入数据(顺序表为逐个向后移动数据)
int len=length-1;
while(!(len<j-1)){
Array[len+1]=Array[len];
--len;
}
Array[len+1]=data;
length++;//数组长度加一
}
void ListDelete(int q){ //删除某数据(顺序表为覆盖)
for(;q<length;q++){
Array[q-1]=Array[q];
}
length--;//实际长度减一
}
void display(){ //遍历顺序表
int y;
for(y=0;y<length;y++)
printf("%d\t",Array[y]);
}
void Text(){ //测试函数
int i,j,data,q;
printf("请输入实际数组长度不可大于15:");
scanf("%d",&i);
InList(i);
printf("请输入插入的位置和数值:");
scanf("%d%d",&j,&data);
InsertList(j, data);
display();
printf("\n");
printf("请输入删除的位置:");
scanf("%d",&q);
ListDelete( q);
display();
}
int main(){//主函数
Text();
return 0;
}
以上定义顺序表采用的是:
#define SIZE 15 //顺序表长
int Array[SIZE];//顺序表
这种方式。其实还可使用结构体进行定义,比如
typedef struct node{
int Array[SIZE];
int length;
}node ;
还可进行动态声明,比如
typedef struct node{
int *Array;
int length;
int ListSize;
}node ;