#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define MAXSIZE 20//存储空间初始分配量
#define OK 1
#define ERROR 0
typedef struct {
int data[MAXSIZE];
int length;
}SqList;
//初始化链表
void Create(SqList *&L)
{
cout << "请输入链表长度:";
int n, val;
cin >> n;
for (int i = 0; i < MAXSIZE; i++)
{
L->data[i] = 0;
L->length = 0;
}
cout << "请输入链表的值:";
for (int i = 0; i < n; i++)
{
cin >> val;
L->data[i] = val;
L->length++;
}
}
void Print(SqList*& L)
{
int i = 0;
cout << "打印链表:";
while (L->data[i] != 0)
{
cout << L->data[i]<<" ";
i++;
}
cout << endl;
cout << "Length=" << L->length << endl;
}
void GetElem(SqList *&L)
//获得元素
//线性表从0开始存元素,所以第i个元素对应的位置是i-1
{
cout << "请输入要查找元素的位置:" ;
int i;
cin >> i;
if (L->length == 0 || i < 1)
cout << "ERROR" << endl;
cout << "数据元素为:";
cout << L->data[i - 1] << endl;
}
//插入操作
//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
void ListInsert(SqList* &L)
{
int i;
int e;
cout << "请输入要插入元素的位置:";
cin >> i;
cout << "请输入要插入元素的值:";
cin >> e;
if (L->length == MAXSIZE)//顺序线性表已经满
cout << "ERROR" << endl;
if (i<1 || i>L->length + 1)//当i比第一位置靠前,或者比最后一位的后一位还要靠后
cout << "ERROR" << endl;
//将新元素插入之前,需要将插入位置以及其后的元素向后移一位(从后往前往后移一位)
if (i <= L->length)
{
for (int k = L->length - 1; k >= i - 1; k--)
L->data[k + 1] = L->data[k];
}
L->data[i - 1] = e;
L->length++;
}
//删除操作
//操作结果:删除线性表内第i个数据元素,并用e返回其值,L的长度减一
void ListDelete(SqList* &L)
{
cout << "请输入要删除元素的位置" ;
int i;
int e;
cin >> i;
if (L->length == 0)//线性表为空
cout << "ERROR" << endl;
if (i<1 || i>L->length)//删除位置不准确
cout << "ERROR" << endl;
e = L->data[i - 1];
if (i < L->length)//如果删除的元素不是最后位置
{
for (int k = i; k <= L->length; k++)//将删除元素的后继元素依次往前移(从前往后)
L->data[k - 1] = L->data[k];
}
L->length--;
}
int main()
{
SqList* L = new SqList;
Create(L);
Print(L);
GetElem(L);
ListInsert(L);
Print(L);
ListDelete(L);
Print(L);
return 0;
}
线性表顺序存储操作
最新推荐文章于 2024-07-20 11:22:21 发布