顺序表的操作是大家在学习数据结构的第一个模块,也是最简单的一个。下列是顺序表的六种基本操作详解,希望能对您有所帮助~
1.建立一个顺序表,输入n个元素并输出
#define MAXSIZE 100//确定最大值
#define OK 1
#define ERROR 0
typedef struct//自定义顺序表类型
{
int *elem;
int length;
}sqlist;
int InitList(sqlist &l)
{
l.elem = new int[MAXSIZE];//在堆区开辟MAXSIZE大小的空间
if (!l.elem)
exit (OVERFLOW);
l.length = 0;//初始化l.length为0
return OK;
}
void printfff(sqlist &l)//把顺序表的输出作为一个独立的函数,在输出时会多次用到
{
int i=0;
for (i = 0; i < l.length; i++)
{
cout << l.elem[i] << " ";
}
cout << endl;
}
2.查找线性表中的最大元素并输出
void findmax(sqlist &l)//查找最大值的函数名为findmax
{
int i;
int q = l.elem[0];
for (i = 0; i < l.length; i++)
{
if (q < l.elem[i])
q = l.elem[i];
}//q等于顺序表中最大的元素
cout << q << endl;//输出q
}
3.在线性表的第i个元素前插入一个正整数x
int ListInsert(sqlist &l, int i, int e)
{
int j;
if ((i < 1) || (i > l.length + 1))//i值表示在顺序表中的第几个位置上插入元素,不可能在i<1或i>l.lengh+1时成立。i若小于等于0,显然不可能,当i等于l.length+1时,代表直接在最后一个元素的后一位插入,则l.length+1成立。
return ERROR;
if (l.length == MAXSIZE)//元素的个数已经达到最大值
return ERROR;
for (j = l.length;j>=i;j--)
l.elem[j] = l.elem[j - 1];//i位置后的元素都向后“挪”一位
l.elem[i - 1] = e;//位置i的元素等于e
++l.length;//千万不要忘了顺序表的长度加一
return OK;
}
4.删除线性表中的第j个元素
int ListDelete(sqlist &l, int i)
{
if ((i < 1) || (i > l.length))
return ERROR;
for (int j=i-1;j<l.length-1;j++)//i位置以后的元素都向前“挪”一位,i位置上的元素被覆盖
l.elem[j] = l.elem[j+1];
--l.length;//千万不要忘了顺序表的长度减一
return OK;
}
5.将线性表中的元素按升序排列
按升序排列可以用排序算法,下面的代码实现用到的是冒泡排序
void sort(sqlist &l)
{
int i,j;
for (i = 0; i < l.length-1; i++)
{
for (j = 0; j < l.length-i - 1; j++)
{
if (l.elem[j] > l.elem[j + 1])
{
int temp = l.elem[j];
l.elem[j] = l.elem[j+1];
l.elem[j + 1] = temp;
}
}
}
}
6.将线性表中的元素就地逆序(只允许用一个暂存单元)
void turn(sqlist &l)
{
int a;//定义暂存空间
for (int i = 0; i < l.length / 2; i++)//注意一定要将l.length除以二,不然得到的结果没有什么变化。读者可用i<l.length带入for循环中用几个数来举例。
{
a = l.elem[l.length - i - 1];
l.elem[l.length - i - 1]=l.elem[i];
l.elem[i] = a;
}
}
如果大家还想知道顺序表的操作详解,欢迎评论告诉我~