数据结构-顺序表实现1

数据结构-顺序表实现1,第1张

头文件 SqList.h

#define SEQLIST_INIT_SIZE 8
#define _CRT_SECURE_NO_WARNINGS
#include
#include
typedef int ElemType;
typedef struct SeqList
{
	ElemType *base;//存储空间基址
	int capacity;
	int size;//真实数据大小
}SeqList;

void InitSeqList(SeqList *list);//初始化顺序表
void push_back(SeqList *list,ElemType x);//尾插
void push_front(SeqList *list, ElemType x);//头插
void show_list(SeqList *list);//显示结果
void pop_back(SeqList *list);//后删
void pop_front(SeqList*list);//头删
void insert_pos(SeqList*list,ElemType x,ElemType e);//指定位置插入元素
ElemType find(SeqList *list,ElemType x);//查询指定元素
ElemType length(SeqList *list);//查询表长

源文件SeqList.c(函数具体实现)

#include"SeqList.h"
#define _CRT_SECURE_NO_WARNINGS
void InitSeqList(SeqList *list) {
	list->base = (ElemType*)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);
	assert(list->base != NULL);
	list->capacity = SEQLIST_INIT_SIZE;
	list->size = 0;
}
void push_back(SeqList *list, ElemType x) {//尾插
	if (list->size > list->capacity)
		printf("空间已满,无法实现尾插!\n");
	else
	{
		list->base[list->size] = x;
		list->size++;
	}
}

void push_front(SeqList *list, ElemType x) {//头插
	if (list->size > list->capacity)
		printf("空间已满,无法实现尾插!\n");
	else
	{
		for (int i = list->size; i > 0; i--)
		{
			list->base[i] = list->base[i - 1];
		}
		list->base[0] = x;
		list->size++;
	}
}

void show_list(SeqList *list) {//显示结果
	int i = 0;
	for (i = 0; i < list->size; i++)
	{
		printf("%d ", list->base[i]);
	}
}

void pop_back(SeqList *list) {//后删
	if (list->size == 0)
		printf("表已空,无法删除\n");
	else
	{
		list->size--;
	}
}

void pop_front(SeqList *list) {//头删
	if (list->size == 0)
		printf("表已空,无法删除\n");
	else
	{
		for (int i = 0; i < list->size; i++) {
			list->base[i] = list->base[i + 1];
		}
			list->size--;
	}
}

void insert_pos(SeqList*list, ElemType x,ElemType e) {//指定位置插入元素
	if (list->size > list->capacity||x<0) {
		printf("空间已满,无法实现尾插!\n");
	}
	else {
		for (int i = list->size; i >= x; i--)
		{
			list->base[i + 1] = list->base[i];
		}
		list->base[x] = e;
		list->size++;
	}
}

ElemType find(SeqList *list,ElemType x) {
	for (int i = 0; i < list->size; i++) {
		if (x == list->base[i]) {
			return i;
		}
	}
			return -1;
}

ElemType length(SeqList *list) {
	return list->size;
}

源文件Main.c(测试函数)

#include"SeqList.h"
#include
#define _CRT_SECURE_NO_WARNINGS
int main() {
	SeqList mylist;
	InitSeqList(&mylist);
	ElemType elem = 0, pos = 0;
	int select = 1;
	while (select) {
		printf("\n**************************************\n");
		printf("*[1] push_back         [2] push_front*\n");
		printf("*[3] show_list         [4] pop_back*\n"  );
		printf("*[5] pop_front         [6] insert_pos*\n");
		printf("*[7] find              [8] length*\n"    );
		printf("*[9] delete_pos        [10]delete_val*\n");
		printf("*[11] sort             [12] resver*\n"   );
		printf("*[13] clear            [14]destory*\n"   );
		printf("*[0] quit_system\n                      ");
		printf("\n**************************************\n");
		printf("请选择你要进行的 *** 作>\n");
		scanf("%d", &select);
		if (select == 0)
			break;
		switch (select) {
		case 1:
			printf("请输入要插入的数据(-1)结束:\n");
			while (scanf("%d", &elem), elem != -1)
				push_back(&mylist, elem);
			break;
		case 2:
			printf("请输入要插入的数据(-1)结束:\n");
			while (scanf("%d", &elem), elem != -1)
				push_front(&mylist, elem);
			break;
		case 3:
			printf("结果如下:\n");
			show_list(&mylist);
			break;
		case 4:
			pop_back(&mylist);
			break;
		case 5:
			pop_front(&mylist);
			break;
		case 6:
			printf("请选择要插入的下标和元素:\n");
			scanf("%d%d", &pos,&elem);
			insert_pos(&mylist,pos,elem);
			break;
		case 7:
			printf("请输入你要查询的元素:\n");
			scanf("%d", &elem);
			pos=find(&mylist, elem);
			if (pos == -1)
				printf("查找的%d不在顺序表中!\n", elem);
			else
				printf("查找的%d在顺序表中的下标为%d\n", elem,pos);
		case 8:
			printf("顺序表的长度为%d",length(&mylist));
			break;
		default :
			printf("输入数据有误,请重新输入\n");
			break;
		}
	}
}

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

原文地址: http://outofmemory.cn/langs/662232.html

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

发表评论

登录后才能评论

评论列表(0条)

保存