#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
float data[MAXSIZE];
int length;
typedef struct node{
float data[MAXSIZE];
int length;
}SeqList,*PSeqList;
/****用指针定义一个初始化链表函数*****/
PSeqList InitSeqList(void){
int i;
PSeqList PL;
PL = (PSeqList )malloc(sizeof(SeqList)); //此处的SeqList改为PSeqList试试,经过试验此处最好不要用PSeqList,虽然能成功,但是最后程序还是会崩溃的
if(PL){ //此处不能用PL==NULL来判断
PL->length = 0;
}
/********以下return语句以上为测试代码段*******/
srand((unsigned int) time(NULL)); //设置随机种子数
for(i = 0;i < 10;i++){
PL->data[i] = rand()%100;
PL->length++;
}
return PL; //返回创建的链表指针
}
/*******求顺序表的长度函数******/
int SeqListLenght(PSeqList L){ //此处括号内的结构体变量的定义形式与具体应用相关联,不可随意定义
return (L->length);
}
///*******求顺序表的长度函数******/
//int SeqListLenght(SeqList L){
// return (L.length);
//}
/****顺序表的检索操作*****/
int LocationSeqList(PSeqList PL,float x){
int i = 0;
while(i < PL->length && PL->data[i] != x)
i++;
if(i >= PL->length){
printf("没有此数据\n");
return 0;
}else
return (i + 1);
}
/******顺序表的插入函数(重点)*******/
int InsertSeqList(PSeqList PL,int i,float x){
int j;
float temp1,temp2;
//第一步检测顺序表是否存在
if(!PL){
printf("顺序表不存在\n");
return -1;
}
//第二步判断顺序表是否满
if(PL->length >= MAXSIZE){
printf("顺序表已满\n");
return -1;
}
//第三步判断插入位置是否合法
if(i < 1 || (i > PL->length + 1)){
printf("插入位置不合法\n");
return -1;
}
//第三步插入数据
////方法一从前面开始腾出位置,要定义两个个临时变量
//temp2 = PL->data[i -1];
//for(j = i;j < PL->length;j++){
// temp1 = temp2;
// temp2 = PL->data[j];
// PL->data[j] = temp1;
// printf("%f ",temp1);
//}
//PL->data[j] = temp2;
//PL->data[i -1] = x;
//方法二从后面开始腾出位置
for(j = PL->length;j >= i-1;j--){
PL->data[j+1] = PL->data[j];
}
PL->data[i-1] = x;
PL->length++;
return (1); //插入成功返回一个大于0的说代表正确
}
/******顺序表的删除函数*******/
int DeleteSeqList(PSeqList PL,int i){
int j;
//第一步检测顺序表是否存在
if(!PL){
printf("顺序表不存在\n");
return -1;
}
//第二步判断插入位置是否合法
if(i < 1 || (i > PL->length + 1)){
printf("删除位置不合法\n");
return -1;
}
//上移操作
for(j = i;j < PL->length;j++){
PL->data[j-1] = PL->data[j];
}
PL->length--;
return (1); //插入成功返回一个大于0的说代表正确
}
int main(){
int i;
PSeqList PL;
PL = InitSeqList();
/******以下一句for循环语句为检测代码段********/
for(i = 0;i < 10;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
/****测试得到数据元素个数代码段****/
printf("%d \n",SeqListLenght(PL));
/****测试检索代码段****/
printf("%d ",LocationSeqList(PL,17));
/****测试插入代码段****/
InsertSeqList(PL,3,199);
/******以下一句for循环语句为检测代码段********/
printf("\n测试插入函数\n");
for(i = 0;i < 11;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
/****测试删除代码段****/
printf("\n测试删除函数");
DeleteSeqList(PL,4);
for(i = 0;i < 11;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
getch();
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
float data[MAXSIZE];
int length;
typedef struct node{
float data[MAXSIZE];
int length;
}SeqList,*PSeqList;
/****用指针定义一个初始化链表函数*****/
PSeqList InitSeqList(void){
int i;
PSeqList PL;
PL = (PSeqList )malloc(sizeof(SeqList)); //此处的SeqList改为PSeqList试试,经过试验此处最好不要用PSeqList,虽然能成功,但是最后程序还是会崩溃的
if(PL){ //此处不能用PL==NULL来判断
PL->length = 0;
}
/********以下return语句以上为测试代码段*******/
srand((unsigned int) time(NULL)); //设置随机种子数
for(i = 0;i < 10;i++){
PL->data[i] = rand()%100;
PL->length++;
}
return PL; //返回创建的链表指针
}
/*******求顺序表的长度函数******/
int SeqListLenght(PSeqList L){ //此处括号内的结构体变量的定义形式与具体应用相关联,不可随意定义
return (L->length);
}
///*******求顺序表的长度函数******/
//int SeqListLenght(SeqList L){
// return (L.length);
//}
/****顺序表的检索操作*****/
int LocationSeqList(PSeqList PL,float x){
int i = 0;
while(i < PL->length && PL->data[i] != x)
i++;
if(i >= PL->length){
printf("没有此数据\n");
return 0;
}else
return (i + 1);
}
/******顺序表的插入函数(重点)*******/
int InsertSeqList(PSeqList PL,int i,float x){
int j;
float temp1,temp2;
//第一步检测顺序表是否存在
if(!PL){
printf("顺序表不存在\n");
return -1;
}
//第二步判断顺序表是否满
if(PL->length >= MAXSIZE){
printf("顺序表已满\n");
return -1;
}
//第三步判断插入位置是否合法
if(i < 1 || (i > PL->length + 1)){
printf("插入位置不合法\n");
return -1;
}
//第三步插入数据
////方法一从前面开始腾出位置,要定义两个个临时变量
//temp2 = PL->data[i -1];
//for(j = i;j < PL->length;j++){
// temp1 = temp2;
// temp2 = PL->data[j];
// PL->data[j] = temp1;
// printf("%f ",temp1);
//}
//PL->data[j] = temp2;
//PL->data[i -1] = x;
//方法二从后面开始腾出位置
for(j = PL->length;j >= i-1;j--){
PL->data[j+1] = PL->data[j];
}
PL->data[i-1] = x;
PL->length++;
return (1); //插入成功返回一个大于0的说代表正确
}
/******顺序表的删除函数*******/
int DeleteSeqList(PSeqList PL,int i){
int j;
//第一步检测顺序表是否存在
if(!PL){
printf("顺序表不存在\n");
return -1;
}
//第二步判断插入位置是否合法
if(i < 1 || (i > PL->length + 1)){
printf("删除位置不合法\n");
return -1;
}
//上移操作
for(j = i;j < PL->length;j++){
PL->data[j-1] = PL->data[j];
}
PL->length--;
return (1); //插入成功返回一个大于0的说代表正确
}
int main(){
int i;
PSeqList PL;
PL = InitSeqList();
/******以下一句for循环语句为检测代码段********/
for(i = 0;i < 10;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
/****测试得到数据元素个数代码段****/
printf("%d \n",SeqListLenght(PL));
/****测试检索代码段****/
printf("%d ",LocationSeqList(PL,17));
/****测试插入代码段****/
InsertSeqList(PL,3,199);
/******以下一句for循环语句为检测代码段********/
printf("\n测试插入函数\n");
for(i = 0;i < 11;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
/****测试删除代码段****/
printf("\n测试删除函数");
DeleteSeqList(PL,4);
for(i = 0;i < 11;i++)
printf("data[%d]=%.2f,length = %d\n",i,PL->data[i],PL->length);
getch();
return 0;
}