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);
}
posted @ 2022-04-11 20:59  千树line  阅读(53)  评论(0)    收藏  举报