C语言数据结构顺序表的实现代码

IDE:Visual Studio 2019

头文件header.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE -1
#define TRUE 1
#define ERROR -1
#define OVERFLOW -2
#define INFEASIBLE -1
#define LIST_INIT_SIZE    100  
#define LISTINCREMENT     10  
typedef int Status;
typedef int ElementType;

 typedef struct{
	ElementType *data;
	int lengths;
	int listsize_sq;
}Sq_list;

头文件means.h

#include "header.h"
//1.初始化表L
Status Initsqlist(Sq_list &L) {//&是C++中的引用调用方法
	L.data = (ElementType*)malloc(LIST_INIT_SIZE * sizeof(ElementType));
	if (!L.data)exit(OVERFLOW);
	L.lengths = 0;
	L.listsize_sq = LIST_INIT_SIZE;
	return OK;
}//Initsqlist
//2.销毁线性表L
void Destorylist(Sq_list &L) {
	if (L.data)free(L.data);
	L.lengths = 0;
}
//3.将L重置为空表
void Clearlist(Sq_list& L) {
	if (L.data)L.lengths = 0;
}
//4.判别L是否为空表
Status Emptylist(Sq_list L) {
	if (!L.lengths)return TRUE;
	else return FALSE;
}
//5.返回L的长度
int Lengthlist(Sq_list L) {
	printf("表长为%d\n", L.lengths);
	return L.lengths;
}
//6.查找第i个元素
Status GetElem(Sq_list L,int i,ElementType &e) {
	if (i<1 || i>L.lengths)return ERROR;
	return e = L.data[i-1];
}
//7.按值查找
Status LocateElem(Sq_list L, ElementType e) {
	int i;
	for (i = 0; i < L.lengths; i++) {
		if (e == L.data[i])return i + 1;
	}
	return FALSE;
}
//8.插入
Status InsertElem(Sq_list& L, int i, ElementType e) {
	if (i<1 || i>L.lengths+1)return ERROR;
	if (L.lengths >= L.listsize_sq) {
		ElementType* newbase = (ElementType*)realloc(L.data, (L.listsize_sq + LISTINCREMENT) * sizeof(ElementType));
		if (!newbase)exit(OVERFLOW);
		L.data = newbase;
		L.listsize_sq += LISTINCREMENT;
	}
	ElementType* q, * p;
	q = &(L.data[i-1]);
	for (p = &(L.data[L.lengths - 1]); p >= q; --p)
		*(p + 1) = *p;
	*q = e;
	++L.lengths;
	return OK;
}
//9.删除
Status DeleteElem(Sq_list& L, int i,ElementType &e) {
	if (i<1 || i>L.lengths)return ERROR;
	ElementType* p, * q;
	p = &L.data[i - 1];
	e = *p;
	q = L.data + L.lengths;
	for (++p; p<q; p++) {
		*(p - 1) = *p;
	}
	L.lengths--;
	return OK;
}
//10.遍历
void displist(Sq_list L) {
	for (int i = 1; printf("%d ", L.data[i-1]), i < L.lengths ; i++) {
		if (!i % 10)printf("\n");
	}
	printf("\n");
}
//11.创建一个非空表
Status Createlist(Sq_list& L) {
	L.data = (ElementType*)malloc(LIST_INIT_SIZE * sizeof(ElementType));
	if (!L.data)exit(OVERFLOW);
	printf("请输入顺序表的长度\n");
	scanf_s("%d", &L.lengths);
	L.listsize_sq = LIST_INIT_SIZE;
	int i;
	printf("请依次输入线性表元素:\n");
	for (i = 0; i < L.lengths; i++){
		scanf_s("%d", &L.data[i]);
	}
	Lengthlist(L);
	displist(L);
}
//12.前驱
//13.后驱

源文件main.cpp

#include "header.h"
#include "means.h"
int main() {
	Sq_list L;
	int a,b,c,d,e,i;
	Createlist(L);
	printf("\n请输入要查询位置的元素:\n");
	scanf_s("%d", &a);
	c=LocateElem(L, a);
	printf("\n查询的位置为%d:\n", c);
	printf("\n请输入要查询元素的位置:\n");
	scanf_s("%d", &i);
	GetElem(L, i, b);
	printf("\n查询的元素为%d:\n",b);
	scanf_s("%d %d", &i,&d);
	InsertElem(L, i, d);
	displist(L);
	scanf_s("%d", &i);
	DeleteElem(L, i, e);
	displist(L);
	return OK;
}

有问题欢迎一起讨论^^

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值