实验内容:
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 numbersn");//防止越界 } else if(n<=0) { printf("errorn"); } else { elemtype x; printf("input your numbersn"); for(int i = 0; i elem[++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("%ft",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("这里不可以~~qaqn"); 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 ; j elem[j] = W->elem[j+1]; } W->last--; return 1; } int main() { printf("菜单姬来咯!!!OwOn"); printf(" 1.输入一组双浮点型元素序列,建立顺序表。n 2.获取表中制定位置的元素。n 3.遍历该顺序表,即在屏幕上顺序打印表中所有元素。n 4.按值查找某一元素,若找到返回元素位置,否则返回-1。n 5.给表里插入元素,若插入成功返回1,否则返回0。n 6.删除表里某一个元素,若删除成功返回1,否则返回0。n 7.go to sleepn"); //create a space SeqList L; SeqList *W = &L; //指针改值 W->last = -1; printf("SAMA , 0 = 失败 , 1 = 成功n"); while(1) { int i1; printf("OwO SAMA,要选哪个呢OVOn"); scanf("%d",&i1); if(i1 == 7) break; //switch 里定义变量要注意 switch (i1) { case 1: CreatSeqList(W); break; case 2: int n; printf("locate wheren"); scanf("%d",&n); elemtype x1; x1 = getElement(W,n-1);//i-1 printf("It is %fn",x1); break; case 3: traverseSeqList(W); break; case 4: { elemtype x2; printf("SAMA,输入你要查找的值n"); scanf("%lf",&x2); int i2 = searchSeqList(W,x2); printf("position : %dn",i2); break; } case 5: { int result; int i3; elemtype x3; printf("SAMA, 0.0 ,输入你要插入的数n"); scanf("%lf",&x3); printf("要插在哪里qaqn"); scanf("%d",&i3); result = insertSeqList(W,i3-1,x3); printf("result = %dn",result); break; } case 6: { int i4; printf("好累啊,你要删哪里内qaqn"); scanf("%d",&i4); int result = deleteSeqList(W,i4-1); printf("result = %dn",result); break; } } } printf("886 to SAMAn"); 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
提肛小助手提醒您:该提肛了(不对);



