不说多的,直接上代码。。。
我已经把所有的操作实现,你可以在main()中自己选择要进行的操作。
#include "stdio.h"
#include "windows.h"
#include "stdlib.h"
#define Maxsize 30 //顺序表最大的长度
//定义顺序表
typedef struct{
int data[Maxsize];
int length;
}SqList;
//初始化顺序表
void InitList(SqList *L){
L->length=0;
}
//创建顺序表
int CreateList(SqList *L,int a[], int n){
int i;
for (i=0;i<n;i++){
L->data[i]=a[i];
}
L->length = n;
return 1;
}
//输出顺序表
void Printf_all(SqList L){
int i;
for(i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
//从键盘读取值到数组
// void input(int a[],int n){
// int i=0;
// for(i;i<n;i++){
// scanf("%d ",&a[i]);
// }
// }
//按顺序插入
int ListInsert(SqList *L,int n,int e){
if(n<0||n>L->length){
printf("you input unlawfal\n");
return 0;
}
if(L->length==Maxsize){
printf("this sequence is full\n");
return 0;
}
else{
int i=L->length;
for(i;i>=n-1;i--){
L->data[i]=L->data[i-1];
}
L->data[n-1]=e;
L->length++;
return 1;
}
}
//按值查找
int Select(SqList L,int e){
int i;
for(i=0;i<L.length;i++){
if(L.data[i]==e){
break;
}
}
return i+1;
}
//折半查找
int SearchExchangeInsert(SqList L,int x){
int low =0;
int hight = L.length-1;
int mid ;
while(low<hight){
mid = (low+hight)/2;
if(L.data[mid]==x){
return mid+1;
}else if(L.data[mid]<x){
low=mid+1;
}else{
hight=mid-1;
}
}
if(low>hight){
return 0;
}
}
//删除指定位置的值
int delete(SqList *L,int i){
for(i;i<L->length;i++){
L->data[i-1]=L->data[i];
}
}
//有序线性表删除指定范围的值(s<t)
int delete_ranke(int s ,int t,SqList *L){
int i=0;
int j=0;
if(s>=t||L->length==0){
return 0;
}
/*** 寻找第一个大于s的数***/
for(i=0;i<L->length&&L->data[i]<s;i++){
;
}
if(i>=L->length){
return 0;
}
/******寻找第一个小于t的数*****/
for(j=i;L->data[j]<=t&&j<L->length;j++){
;
}
/*******进行删除******/
for(j;j<L->length;i++,j++){
L->data[i]=L->data[j];
}
L->length=i;
return 1;
}
/*******修改值********/
void ChangeByValue(SqList *L,int i,int e){
if(i<0||i>L->length){
printf("your range is illegal");
}else{
L->data[i-1]=e;
}
}
int main(){
SqList L;
InitList(&L);
int a[10]={6,7,8,9,10,11,12,13,15,16};
CreateList(&L,a,10);
printf("创建完成,输出所有的值为\n");
Printf_all(L);
//在第t个位置插入100
// int t=6;
// if(ListInsert(&L,t,100)==0){
// ;
// }else{
// int t=6;
// ListInsert(&L,t,100);
// printf("在第");
// printf("%d",t);
// printf("个位置插入100:\n");
// Printf_all(L);
// }
//按值查找8
// printf("the numble 8 located in %d",Select(L,8));
//折半查找x
printf("X的位置是: %d\n",SearchExchangeInsert(L,8));
//删除一定范围的值
delete_ranke(5,9,&L);
Printf_all(L);
//printf("%d\n",L.length);
//修改值
ChangeByValue(&L,1,9);
Printf_all(L);
}