实验内容:
1. 输入一组双浮点型元素序列,建立顺序表。建表函数:void CreatList(Sqlist *L);
2. 获取表中制定位置的元素。 取元素函数ElementType GetElement(Sqlist *L, int i)。其中i为指定的位置。
3. 遍历该顺序表,即在屏幕上顺序打印表中所有元素。遍历函数:void TraverseList(Sqlist *L);
4. 按值查找某一元素,若找到返回元素位置,否则返回-1。查找函数int SearchList(Sqlist *L, ElementType x);
5. 给表里插入元素,若插入成功返回1,否则返回0。插入函数 int InsertList(Sqlist *L, int i, ElementType x),即给表L位置i处插入元素x。执行删除 *** 作之前和之后遍历表中的元素以验证删除 *** 作的正确性。
6. 删除表里某一个元素,若删除成功返回1,否则返回0。删除函数DeleteList(Sqlist *L, int i),即删除表L位置i处的元素。执行插入 *** 作之前和之后遍历表中的元素以验证插入 *** 作的正确性。
#include
#define MAXSIZE 100
typedef double elemtype;
typedef struct SeqList {
elemtype elem[MAXSIZE];
int last;
} SeqList;
//建表
void CreatSeqList(SeqList *W) {
int n;
printf("输入你要的个数: ");
scanf("%d",&n);
if(n>MAXSIZE) {
printf("error too many numbers\n");//防止越界
} else if(n<=0) {
printf("error\n");
} else {
elemtype x;
printf("input your numbers\n");
for(int i = 0; ielem[++W->last] = x;
}
}
}
//locate
elemtype getElement(SeqList *W,int i) {
return (W->elem[i]);
}
//traverse
void traverseSeqList(SeqList *W) {
if(W->last == -1)
printf("SAMA,您的表为空");
for(int i = 0; i<=W->last; i++) {
printf("%f\t",W->elem[i]);
}
puts("");
}
//search by 值
int searchSeqList(SeqList *W,elemtype x) {
int i;
for( i = 0 ; i<=W->last; i++ ) {
if(x == W->elem[i])
return i+1;
}
if(i > W->last) {
return -1;
}
}
//insert(半笑) qaq
int insertSeqList(SeqList *W,int i, int x) {
if(W->last == MAXSIZE -1) {
printf("要溢出了捏,不给你插qaq,哼!\n");
return 0;
}
if(i<0||i>MAXSIZE-1) {
printf("这里不可以~~qaq\n");
return 0;
}
for(int j = W->last; j>=i; j--) {
W->elem[j+1] = W->elem[j];
}
W->elem[i] = x;
W->last++;
return 1;
}
//delete
int deleteSeqList(SeqList *W, int i) {
if(i<0||i>MAXSIZE-1) {
printf("那里删不了捏\n");
return 0;
}
for(int j = i ; jelem[j] = W->elem[j+1];
}
W->last--;
return 1;
}
int main() {
printf("菜单姬来咯!!!OwO\n");
printf(" 1.输入一组双浮点型元素序列,建立顺序表。\n\
2.获取表中制定位置的元素。\n\
3.遍历该顺序表,即在屏幕上顺序打印表中所有元素。\n\
4.按值查找某一元素,若找到返回元素位置,否则返回-1。\n\
5.给表里插入元素,若插入成功返回1,否则返回0。\n\
6.删除表里某一个元素,若删除成功返回1,否则返回0。\n\
7.go to sleep\n");
//create a space
SeqList L;
SeqList *W = &L; //指针改值
W->last = -1;
printf("SAMA , 0 = 失败 , 1 = 成功\n");
while(1) {
int i1;
printf("OwO SAMA,要选哪个呢OVO\n");
scanf("%d",&i1);
if(i1 == 7)
break;
//switch 里定义变量要注意
switch (i1) {
case 1:
CreatSeqList(W);
break;
case 2:
int n;
printf("locate where\n");
scanf("%d",&n);
elemtype x1;
x1 = getElement(W,n-1);//i-1
printf("It is %f\n",x1);
break;
case 3:
traverseSeqList(W);
break;
case 4: {
elemtype x2;
printf("SAMA,输入你要查找的值\n");
scanf("%lf",&x2);
int i2 = searchSeqList(W,x2);
printf("position : %d\n",i2);
break;
}
case 5: {
int result;
int i3;
elemtype x3;
printf("SAMA, 0.0 ,输入你要插入的数\n");
scanf("%lf",&x3);
printf("要插在哪里qaq\n");
scanf("%d",&i3);
result = insertSeqList(W,i3-1,x3);
printf("result = %d\n",result);
break;
}
case 6: {
int i4;
printf("好累啊,你要删哪里内qaq\n");
scanf("%d",&i4);
int result = deleteSeqList(W,i4-1);
printf("result = %d\n",result);
break;
}
}
}
printf("886 to SAMA\n");
return 0;
}
记录一下其中出现的问题qaq:(恼!!!!,怎么老有问题)
1.顺序表和之前的数组感觉好像qaq,很多 *** 作也像,qaq多个last(书上说last指针我哭了他T^T)。
2.最大の发现:case中申请变量是有点问题的,最好在case里加上{ }或者你直接在switch外面定义这个变量也可以,(虽然之前书上可以不写,但还是最好加上吧),比如我上面代码里case 4:和 case 5:都加了{},否则会报错,原因是因为局部变量的问题,要想具体知道,快问六花捏(其实是我还没搞懂orz)。
可以看这个:http://t.csdn.cn/rOFhnhttp://t.csdn.cn/rOFhn
提肛小助手提醒您:该提肛了(不对);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)