?? bo2-8.cpp
字號:
// bo2-8.cpp 順序表示的線性表(存儲結構由c2-1.h定義)的擴展操作(10個)
#include"bo2-1.cpp"
void InsertAscend(SqList &L,ElemType e)
{ // 初始條件:按非降序排列的順序線性表L已存在
// 操作結果:在L中按非降序插入新的數據元素e,L的長度加1
ElemType *newbase,*p;
int k;
if(L.length>=L.listsize) // 當前存儲空間已滿,增加分配
{
if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
exit(OVERFLOW); // 存儲分配失敗
L.elem=newbase; // 新基址
L.listsize+=LISTINCREMENT; // 增加存儲容量
}
p=L.elem;
for(k=1;k<=L.length;k++)
if(e>*p)
p++;
else
break;
ListInsert(L,k,e); // 函數在bo2-1.cpp中
}
void InsertDescend(SqList &L,ElemType e)
{ // 初始條件:按非升序排列的順序線性表L已存在
// 操作結果:在L中按非升序插入新的數據元素e,L的長度加1
ElemType *newbase,*p;
int k;
if(L.length>=L.listsize) // 當前存儲空間已滿,增加分配
{
if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
exit(OVERFLOW); // 存儲分配失敗
L.elem=newbase; // 新基址
L.listsize+=LISTINCREMENT; // 增加存儲容量
}
p=L.elem;
for(k=1;k<=L.length;k++)
if(e<*p)
p++;
else
break;
ListInsert(L,k,e); // 函數在bo2-1.cpp中
}
Status HeadInsert(SqList &L,ElemType e)
{ // 初始條件:順序線性表L已存在。操作結果:在L的頭部插入新的數據元素e,L的長度加1
ElemType *p,*q,*newbase;
if(L.length>=L.listsize)
{
if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=L.elem;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
L.length++;
return OK;
}
Status EndInsert(SqList &L,ElemType e)
{ // 初始條件:順序線性表L已存在。操作結果:在L的尾部插入新的數據元素e,L的長度加1。
ElemType *q,*newbase;
if(L.length>=L.listsize) // 當前存儲空間已滿,增加分配
{
if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
exit(OVERFLOW); // 存儲分配失敗
L.elem=newbase; // 新基址
L.listsize+=LISTINCREMENT; // 增加存儲容量
}
q=L.elem+L.length; // q為插入位置
*q=e;
L.length++;
return OK;
}
Status DeleteFirst(SqList &L,ElemType &e)
{ // 初始條件:順序線性表L已存在,且有不少于1個元素
// 操作結果:刪除L的第一個數據元素,并由e返回其值,L的長度減1
ElemType *p,*q;
if(ListEmpty(L)) // 空表無法刪除
return ERROR;
p=L.elem; // p指向第一個元素
e=*p;
q=L.elem+L.length-1; // q指向最后一個元素
for(++p;p<=q;++p)
*(p-1)=*p; // 從第2個元素起,所有元素向前移動一個位置
L.length--; // 當前長度減1
return OK;
}
Status DeleteTail(SqList &L,ElemType &e)
{ // 初始條件:順序線性表L已存在,且有不少于1個元素
// 操作結果:刪除L的最后一個數據元素,并用e返回其值,L的長度減1
ElemType *p;
if(!L.length) // 空表
return ERROR;
p=L.elem+L.length-1; // 最后一個數據元素的位置
e=*p; // 被刪除元素的值賦給e
L.length--; // 表長減1
return OK;
}
Status DeleteElem(SqList &L,ElemType e)
{ // 刪除表中值為e的元素,并返回TRUE;如無此元素,則返回FALSE
int i=0,j;
while(i<L.length&&e!=*(L.elem+i))
i++;
if(i==L.length) // 沒找到
return FALSE;
else
{
for(j=i;j<L.length;j++)
*(L.elem+j)=*(L.elem+j+1); // 后面的元素依次前移
L.length--; // 當前長度減1
return TRUE;
}
}
Status ReplaceElem(SqList L,int i,ElemType e)
{ // 用e取代表L中第i個元素的值
if(i<1||i>L.length) // i值不合法
exit(ERROR);
*(L.elem+i-1)=e;
return OK;
}
Status CreatAscend(SqList &L,int n)
{ // 按非降序建立n個元素的線性表
int i,j;
ElemType e;
InitList(L);
printf("請輸入%d個元素:\n",n);
cin>>e;
ListInsert(L,1,e); // 在空表中插入第1個元素
for(i=1;i<n;i++)
{
cin>>e;
for(j=0;j<L.length;j++)
if(e<=*(L.elem+j))
break;
ListInsert(L,j+1,e); // 插于表中
}
return TRUE;
}
Status CreatDescend(SqList &L,int n)
{ // 按非升序建立n個元素的線性表
int i,j;
ElemType e;
InitList(L);
printf("請輸入%d個元素:\n",n);
cin>>e;
ListInsert(L,1,e); // 在空表中插入第1個元素
for(i=1;i<n;i++)
{
cin>>e;
for(j=0;j<L.length;j++)
if(e>=*(L.elem+j))
break;
ListInsert(L,j+1,e); // 插于表中
}
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -