建立顺序表实现顺序表的基本操作
2011-9-12 16:10
提问者: 浚痕 | 浏览次数:1361
1)建立4个元素的顺序表SqList={2345},实现顺序表的基本操作;
2)在SqList={2,3,4,5}的元素45之间插入一个元素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
链表初始化创建一个链表。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。