數據結構——順序表的創建及功能函數

//SqList.h
#ifndef _SQ_LIST_
#define _SQ_LIST_

#define MAX 100

typedef struct _LinerList {
	int data[MAX];
	int length;
}SqList;

#endif // !_SQ_LIST_


//SqList_OP.h
#ifndef _SQ_LIST_OP_
#define _SQ_LIST_OP_

#include <stdio.h>
#include <stdlib.h>
#include "SqList.h"

void Init_List(SqList *L) {	//初始化
	L->length = 0;
}

void Prt_List(SqList *L) {	//打印
	int count = 0;
	printf("The list is:\n");
	for (count = 0; count < (L->length - 1); count++) {
		printf("%d\n", L->data[count]);
	}
}

void Crt_List(SqList *L) {	//創建,錄入數據
	int num = 0;
	int i = 0;
	do {
		printf("input number\n");
		scanf("%d", &num);
		L->data[i] = num;
		i++;
	} while (num != -1);
	L->length = i;//完成輸入,此時的長度爲錄入了-1的總長度
}

void Destroy_List(SqList *L) {	//銷燬
	free(L);
}

int List_Length(SqList *L) {	//求順序表長度
	return L->length;
}

void Get_Elem(SqList *L, int i, int *e) {	//將表中第i個元素值返回給e
	*e = L->data[i - 1];
	printf("the value of e is %d\n", *e);
}

void Locate_Elem(SqList *L, int e) {	//查找給定元素在表中第一次出現時的位置
	int IsFound = 0;
	int i;
	for (i = 0; i < (L->length - 1); i++) {
		if (L->data[i] == e) {
			IsFound = 1;
			break;
		}
	}
	if (IsFound == 0) {
		printf("Cannot Find!\n");
	}
	else {
		printf("The number locate at number %d!\n", i + 1);
	}
}

void Insert_List(SqList *L, int e, int i) {	//在第i個元素插入新元素e
	if (i < 1 || (i > L->length + 1)) {
		printf("illegal value of i\n");
	}
	else {
		int *q = &(L->data[i-1]);
		int *last=L->data;
		while (*last!=-1)
		{
			last++;
		}
		for (; last >= q;last--) {
			*(last + 1) = *last;
		}
		*q = e;
		L->length += 1;
	}
}

void Delete_List(SqList *L, int i) {	//刪除第i個元素的值
	if (i < 1 || (i > L->length + 1)) {
		printf("illegal value of i\n");
	}
	else {
		int *q = &(L->data[i - 1]);
		int *last = L->data;
		while (*last != -1)
		{
			last++;
		}
		for (; q<=last; q++) {
			*q = *(q+1);
		}
		L->length -= 1;
	}
}
#endif // !_SQ_LIST_OP_


//main() fuc
#include <stdio.h>
#include <stdlib.h>
#include "SqList.h"
#include "SqList_OP.h"

void Init_List(SqList *L);
void Prt_List(SqList *L);
void Crt_List(SqList *L);
void Destroy_List(SqList *L);
int List_Length(SqList *L);
void Get_Elem(SqList *L, int i, int *e);
void Locate_Elem(SqList *L, int e);
void Insert_List(SqList *L, int e, int i);
void Delete_List(SqList *L, int i);

int main() {//測試
	SqList *L = NULL;
	L = (SqList *)malloc(sizeof(SqList));

	Init_List(L);
	Crt_List(L);
	Prt_List(L);
	printf("length is %d\n", List_Length(L));

	//int e = 0;
	int i = 0;
	printf("Input the number i\n");
	scanf("%d", &i);
	//Insert_List(L, e, i);
	Delete_List(L, i);
	Prt_List(L);
	printf("length is %d\n", List_Length(L));
	getchar();
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章