数据与结构-顺序表
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE]; int length; }SeqList;//定义一个顺序表 SeqList *L; //初始化顺序表 void init_SeqList(SeqList *L) { L->length=0;//长度为0,顺序表自然为空 } //插入函数 int Inser_SeqList(SeqList *L,int i,ElemType x) { int j; if(L->length==MAXSIZE-1)//表满 { printf("表满!"); return -1; } if(i<1||i>L->length+1)//0号位置不放数据,这句话的意思 { printf("表满!"); return -1; } //排除了所有不能插入的情况后,可以直接开始插入 for(j=L->length;j>=i;j--) L->elem[j+1]=L->elem[j];//逐个移动位置,直到把待插入的位置空出来 L->elem[i]=x; //待插入的位置空余后,把待插入的数据赋值给那个位置 L->length++; return 1; //1表示成功,-1表示不成功 } //删除函数 待删除的数据表,待删除的位置 int Delete_SeqList(SeqList *L,int i) { int j; if(i<1||i>L->length) { printf("不存在%d位置,这个元素",i); return -1; } for(j=i;j<=L->length-1;j++) { L->elem[j]=L->elem[j+1];//直接向删除位置进行数据移动,把删除位置的数据覆盖掉,完成删除(顺序表) } L->length--;//长度收缩,完全丢掉 return 1; } //查找函数 int Location_SeqList(SeqList *L,ElemType x) { int i=1; //第一个条件跳出,表长不够,或者说查找数据不在此内 //第二个条件跳出,数据被找到了 while(i<L->length&&L->elem[i]!=x) i++; if(i>L->length) return -1; else return i; } int Location_SeqList1(SeqList L,int i) { //第一个条件跳出,表长不够,或者说查找数据不在此内 //第二个条件跳出,数据被找到了 while(i<L.length||i>0)//判断位置的合法性 return L.elem[i]; } //判断线性表是否为空 int ListEmpty(SeqList *L) { if(L->length!=0) return 1; else return -1; } /* int ListEmpty1(SeqList *L) { int i=1; int j=0; while(i<=L->length) { if(L->elem[i]!=0) j++; } if(j!=0) return j; else return 0; } */ //输出表的长度 int LongList(SeqList *L) { if(L->length!=0) return L->length; else return 1; } //清空表 int ClearList(SeqList *L) { L->length=0;//长度为0,顺序表自然为空 return 1; } int main() { SeqList L1; int i,num; init_SeqList(&L1);//预先清空顺序表,准备开始存放数据 L1.length=6; printf("请输入6个数据!\n"); for(i=1;i<=6;i++) { scanf("%d",&L1.elem[i]); } num=Inser_SeqList(&L1,4,6); printf("插入返回结果为:%d,其中:1表示成功,-1表示不成功 \n",num); for(i=1;i<=7;i++) { printf("%3d",L1.elem[i]); } num=Delete_SeqList(&L1,2); printf("\n删除返回结果为:%d,其中:1表示成功,-1表示不成功 \n",num); for(i=1;i<=6;i++) { printf("%3d",L1.elem[i]); } { printf("%3d",L1.elem[i]); } printf("\n"); num=Location_SeqList1(L1,2); printf("取二号元素为:%d\n",num); num=ListEmpty(&L1); printf("%d\n",num); if(num==-1) { printf("数据表ture表示空,false表示非空:%c%c%c%c\n",116,117,114,101); } else if(num==1) { printf("数据表ture表示空,false表示非空:%c%c%c%c%c\n",102,97,108,115,101); } else{ printf("程序错误!"); } num=LongList(&L1); printf("表长为:%d\n",num); printf("如果结果为负,表示为空表\n"); ClearList(&L1); num=LongList(&L1); printf("清空表:如果结果为1,表示为空表(清空成功),为其它数字表示未成功\n"); printf("结果为:%d\n",num); }