⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlist.h

📁 A
💻 H
字号:
#include "iostream.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;

typedef int ElemType;

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
	ElemType *elem;
	int length;
	int listsize;
}SqList;

Status InitList_Sq(SqList &L) 
{
   // 构造一个空的线性表L。
   L.elem = new ElemType[LIST_INIT_SIZE];
   if (!L.elem) return OVERFLOW; // 存储分配失败
   L.length = 0;							  // 长度为0
   L.listsize = LIST_INIT_SIZE; // 初始存储容量
   return OK;
} // InitList_Sq

Status ListInsert_Sq(SqList &L, int i, ElemType e) 
{
	ElemType *p,*q;
	if (i < 1 || i > L.length+1) return ERROR;
	if (L.length >= L.listsize) 
	{  // 当前存储空间已满,增加分配
		ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
		if (!newbase) return OVERFLOW; // 存储分配失败
		L.elem = newbase; // 新基址
		L.listsize += LISTINCREMENT; // 增加存储容量
	}
	q = &(L.elem[i-1]); // q指示插入位置
	for (p = &(L.elem[L.length-1]); p >= q; --p) *(p+1) = *p;
    // 插入位置及之后的元素右移
    *q = e; // 插入e
	++L.length; // 表长增1
	return OK;
} // ListInsert_Sq

Status ListDelete_Sq(SqList &L, int i, ElemType &e) 
{  
	ElemType *p,*q;
	if ((i < 1) || (i > L.length)) return ERROR; 
	p = &(L.elem[i-1]); // p为被删除元素的位置
	e = *p; // 被删除元素的值赋给e
	q = L.elem+L.length-1; // 表尾元素的位置
	for (++p; p <= q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移
	--L.length; // 表长减1
	return OK;
} // ListDelete_Sq

void Create_Sq(SqList &L)
{
	cout<<"请输入元素个数:";
	cin>>L.length;
	cout<<"创建顺序表"<<endl;
	for(int i=0;i<L.length;i++)
	{
		cout<<"请输入第"<<i+1<<"个数:";
		cin>>L.elem[i];
		cout<<endl;
	}
}

void Print_Sq(SqList &L)
{
	cout<<"输出顺序表:"<<endl;
	for(int i=0;i<L.length;i++) cout<<L.elem[i]<<"  ";
	cout<<endl;
}

void swap(ElemType &x,ElemType &y)
{
	int z;
	z=x; x=y; y=z;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -