欢迎指正!
/*******************************************************
顺序表的实现——C语言版
********************************************************/
#include <stdio.h>
#include <stdlib.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE (-1)
#define OVERFLOW (-2)
#define List_Init_Size 10
//顺序表数据结构
typedef struct OrderList{
int List[List_Init_Size];
int listsize;
}okk;
//进表
void InList(struct OrderList *pOrderlist){
pOrderlist->listsize = 0;
printf("空表:listsize = %d\n",pOrderlist->listsize);
}
//求表长
int OrderListLength(struct OrderList *pOrderlist){
printf("求表长:listsize = %d\n",pOrderlist->listsize);
return pOrderlist->listsize;
}
//取得第i个元素,并返回其值
int GetIValue(struct OrderList *pOrderlist, int i){
if((i<1)||(i>pOrderlist->listsize)){
printf("GetIValue() Wrong Used!!\n");
}
printf("取得第%d个元素,值是:%d\n",i,pOrderlist->List[i]);
return pOrderlist->List[i];
}
//取得第一个值为value的元素,并返回其位序,若表中不存在该值,返回0
int LocateValue(struct OrderList *pOrderlist, int value){
int i=0;
while(i<pOrderlist->listsize-1&&pOrderlist->List[i]!=value)
i++;
if(i == pOrderlist->listsize){
printf("Wrong!!\n");
return 0;
}
printf("值为%d的元素第一次出现的位置:%d\n",value,i);
return i; //printf("该元素第一次出现的位置:%d",i);
}
//在第i位序插入元素,该元素值为value
int InsOrderList(struct OrderList *pOrderlist, int i, int value){
int j;
int k;
k = i;
printf("value = %d\n",value);
if(i<0||i>pOrderlist->listsize-1){
printf("插入元素错误,顺序表没有输入的位序长。\n");
return ERROR;
}
printf("插入前,%d位序元素的值是:%d,表长是%d!!!\n",k,pOrderlist->List[k],pOrderlist->listsize);
for(j=pOrderlist->listsize; j>=i; j--)
pOrderlist->List[j] = pOrderlist->List[j-1];
pOrderlist->List[j] = value;
pOrderlist->listsize++;
printf("插入后,%d位序元素的值是:%d,表长是%d!!!\nList=",k,pOrderlist->List[k],pOrderlist->listsize);
for(k=0; k<pOrderlist->listsize; k++)
printf("%d、",pOrderlist->List[k]);
printf("\n");
return OK;
}
//删除第i位序的元素
int DelOrderList(struct OrderList *pOrderlist, int i){
int j;
int k;
k=i;
if(i<0||i>pOrderlist->listsize-1)
return ERROR;
printf("删除前,%d位序元素的值是:%d,表长是%d!!!\n",k,pOrderlist->List[k],pOrderlist->listsize);
for(j=i; j<pOrderlist->listsize-1; j++)
pOrderlist->List[j] = pOrderlist->List[j+1];
pOrderlist->listsize--;
printf("删除后,%d位序元素的值是:%d,表长是%d!!!\nList",k,pOrderlist->List[k],pOrderlist->listsize);
for(k=0; k<pOrderlist->listsize; k++)
printf("%d、",pOrderlist->List[k]);
printf("\n");
return OK;
}
//顺序表元素按不减顺序排列 //冒泡法
void NotIncSort(struct OrderList *pOrderlist){
int i,j,temp;
for(i=0;i<pOrderlist->listsize-1; i++)
for(j=0; j<pOrderlist->listsize-1-i; j++)
if(pOrderlist->List[j]>pOrderlist->List[j+1]){
temp = pOrderlist->List[j];
pOrderlist->List[j] = pOrderlist->List[j+1];
pOrderlist->List[j+1] = temp;
}
printf("NotIncSort is :");
for(i=0; i<pOrderlist->listsize; i++)
printf("%d",pOrderlist->List[i]);
printf("\n");
}
int main(void)
{
int i,select,j;int w;
struct OrderList *pOrderlist;
struct OrderList li;
InList(&li);
printf("请输入数据:\n");
pOrderlist=&li ;
pOrderlist->listsize=0;
for (i=0;i<5; i++)
{
scanf("%d",&li.List[i]);
pOrderlist->listsize++;
}
printf("\n");
printf("1:置空表! \n");
printf("2:求长度! \n");
printf("3:读取元素! \n");
printf("4:定位查找! \n");
printf("5:插入! \n");
printf("6:删除! \n");
printf("7:排序! \n");
printf("请选择(1----7) \n");
scanf("%d",&select);
switch(select)
{
case 1:
InList(&li);break;
case 2:
printf("chang du %d",OrderListLength(&li));
break;
case 3:
printf("输入序号:");
scanf("%d",&i);
GetIValue(&li,i);
break;
case 4:
printf("输入元素:");
scanf("%d",&i);
LocateValue (&li,i);
break;
case 5:
printf("输入插入的位置:");
scanf("%d",&i);
printf("输入插入的元素:");
scanf("%d",&j);
InsOrderList(&li,i,j);
break;
case 6:
printf("输入所要删除数据的位置:");
scanf("%d",&w);
DelOrderList(&li,w);
break;
case 7:
NotIncSort(&li);
break;
default:
break;
}
return OK;
}