C语言实现线性表的基本 *** 作

C语言实现线性表的基本 *** 作,第1张

实验内容:

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

提肛小助手提醒您:该提肛了(不对);

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1295892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存