1. 程式人生 > 其它 >2.7 順序表的基本功能實現

2.7 順序表的基本功能實現

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10

/*
	程式設計實現:利用陣列順序表的形式完成建表、插入、刪除、倒置、排序、輸出等操作
*/

typedef struct List{
	int data[MaxSize];
	int length;
}*SeqList;

//初始化
void InitList(SeqList& l) {
	l = (SeqList)malloc(sizeof(List));
	if(l!=NULL)l->length = 0;
}

//建立順序表
void CreateList(SeqList& l, int data[], int length) {
	InitList(l);
	int i;
	for ( i = 0; i < length; i++)
	{
		l->data[i] = data[i];
	}
	l->length=length;
}

bool ElemInsert(SeqList& l, int i, int e) {
	if (i<1 || i>l->length + 1) return false;
	if (i > MaxSize) return false;
	for (int j = l->length; j >= i; j--)
	{
		l->data[j] = l->data[j - 1];
	}
	l->data[i - 1] = e;
	l->length++;
	return true;
}

//刪除第i個元素
bool ElemDelete(SeqList& l, int i) {
	if (l->length == 0) return false;
	int j;
	for ( j = i; j< l->length; j++)
	{
		l->data[j-1] = l->data[j];
	}
	l->length--;
	return true;
}
void reverseList(SeqList& l) {
	int temp = 0;
	for (int i = 0; i < l->length/2; i++)
	{
		temp =l->data[i] ;
		l->data[i] = l->data[l->length - i - 1];
		l->data[l->length-i-1] = temp;
	}
}

void sortList(SeqList& l) {
	int i, j, k,temp;
	for ( i = 0; i < l->length-1; i++)
	{
		k = i;
		for (j = i + 1; j < l->length; j++) {
			if (l->data[k]>l->data[j])
			{
				k = j;
			}
		}
		temp = l->data[i];
		l->data[i] = l->data[k];
		l->data[k] = temp;
	}
}

//輸出
void printList(SeqList l) {
	for (int i = 0; i < l->length; i++)
	{
		printf("%d\t", l->data[i]);
	}
	printf("\n");
}

int main() {
	SeqList l;
	int data[6] = { 1,2,3,4,5,6 };

	//建立表
	CreateList(l, data, 6);
	printList(l);
	
	//插入元素
	ElemInsert(l, 3, 9);
	printList(l);

	//刪除元素
	ElemDelete(l, 2);
	printList(l);

	//倒置表
	reverseList(l);
	printList(l);

	//排序
	sortList(l);
	printList(l);
}