建立顺序表实现顺序表的基本操作
2011-9-12 16:10
提问者: 浚痕 | 浏览次数:1361次
(1)建立4个元素的顺序表SqList={2,3,4,5},实现顺序表的基本操作;
(2)在SqList={2,3,4,5}的元素4与5之间插入一个元素9,实现顺序表插入的基本操作;
(3)在SqList={2,3,4,9,5}中删除指定位置(i=3)上的元素,实现顺序表删除的操作
#include <iostream.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 10
#define LISTINCREMENT 2
typedef struct shunxubiao{
ElemType *list;
int size;
int Maxsize;
}SqList;
int InitList_Sq(SqList &L)
{
// 构造一个空的线性表L。
L.list = new ElemType[LIST_INIT_SIZE];
if (!L.list) return OVERFLOW; // 存储分配失败
L.size = 0; // 长度为0
L.Maxsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
} // InitList_Sq
int InsertList_Sq(SqList &L, int i, ElemType e)
{
ElemType *p,*q;
if (i < 1 || i > L.Maxsize+1) return ERROR;
q = &(L.list[i-1]); // q指示插入位置
for (p=&(L.list[L.Maxsize-1]); p >= q; --p)
*(p+1) = *p;
// 插入位置及之后的元素右移
*q = e; // 插入e
++L.size; // 表长增1
return OK;
} // ListInsert_Sq
int LocateElem_Sq(SqList L, ElemType e) {
// 在顺序表中查询数据元素e,若存在,则返回它的位序,否则返回 0
int i = 1; // i 的初值为第 1 元素的位序
ElemType *p = L.list; // p 的初值为第 1 元素的存储位置
while (i <= L.size && *p!=e)
{
++i;
++p;
}
if (i <= L.size) return i;
else return 0;
}
Status InsertList_Sq(SqList &L,ElemType e,ElemType f,ElemType g)
{
int i=LocateElem_Sq(L,e);
int j=LocateElem_Sq(L,f);
if(i==j-1)
{
InsertList_Sq(L,j,g);
return OK;
}
else return ERROR;
}
int GetList_Sq(SqList L,int i)
{
if(i>0 && i<=L.size)
{
return L.list[i];
}
else
return ERROR;
}
Status ListDelete_Sq(SqList &L, int i, ElemType &e)
{
ElemType *p,*q;
if ((i < 1) || (i > L.Maxsize)) return ERROR;
p = &(L.list[i-1]); // p为被删除元素的位置
e = *p; // 被删除元素的值赋给e
q = L.list+L.size-1; // 表尾元素的位置
for (++p; p <= q; ++p)
*(p-1) = *p; // 被删除元素之后的元素左移
--L.size; // 表长减1
return OK;
} // ListDelete_Sq
c语言listinsert函数void Create_Sq(SqList &L)
{
cout<<"创建顺序表"<<endl;
cout<<"请输入元素个数:";
int count;
cin>>count;
for(int i=0;i<count;i++)
{
cout<<"请输入第"<<i+1<<"个数:";
cin>>L.list[i];
++L.size;
}
}
void Print_Sq(SqList &L)
{
cout<<"输出顺序表:"<<endl;
for(int i=0;i<L.size;i++)
cout<<L.list[i]<<" ";
}
void main()
{
SqList myList;
ElemType e,f,g,sc;
InitList_Sq(myList);
Create_Sq(myList);
cout<<"请输入要插入顺序表的元素:"<<endl;
cin>>g;
cout<<"请输入新插入元素在顺序表中哪两个元素之间:"<<endl;
cin>>e>>f;
if(!InsertList_Sq(myList,e,f,g))
cout<<"插入的位置不对!"<<endl;
cout<<"删除一个元素,请输入要删除的位序:"<<endl;
int wx;
cin>>wx;
if(!ListDelete_Sq(myList,wx,sc))
cout<<"删除元素失败!"<<endl;
Print_Sq(myList);
}
链表基本操作练习(C语言)
2011-9-1 19:40
提问者: 追觉者 | 浏览次数:440次
1 链表初始化创建一个链表。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论