首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

线性表解决办法

2013-04-22 
线性表这个顺序表,我是看别人的,用数组建立的,有没有不用数组的方法?还有就是用数组的话,不能插入元素,怎

线性表
这个顺序表,我是看别人的,用数组建立的,有没有不用数组的方法?
还有就是用数组的话,不能插入元素,怎么办啊?

#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50

typedef struct
{
int data[MAXSIZE];
int length;
}SqList;
void CreatList(SqList *&L,int a[],int n)    //创建顺序表
{
L=(SqList *)malloc(sizeof(SqList));
for(int i=0;i<n;i++)
{
L->data[i]=a[i];
}
L->length=n;
}
void InitList(SqList *&L)                    //初始化
{
L=(SqList *)malloc(sizeof(SqList));
L->length= 0;
}
void DestroyList(SqList *L)                 //销毁表
{
free(L);
}
int ListEmpty(SqList *L)                    //判断是否为空
{
return (L->length== 0);
}
int ListLength(SqList *L)                   //求表长
{
return (L->length);
}
void DisList(SqList *L)                     //显示表
{
int i;
if(ListEmpty(L)) return;
for(i= 0;i<L-> length;i++)
printf("%d\n",L->data[i]);
printf("\n");
}
int GetElem(SqList *L,int i,int &e)         
{
if(i< 1 || i>L->length)
return 0;
e= L->data[i-1];
return e;
}
int LocateElem(SqList *L,int e)             //查找元素
{
int i= 0;
while(i< L->length && L->data[i]!= e) i++;
if(i>= L->length)
return 0;
else
return 1;
}
int ListInsert(SqList *L,int i,int e)        //插入元素
{
int j(0);
if(i< 1|| i> L->length)
return 0;
i--;
for(;j<L->length;j--)
L->data[j]=L->data[j-1];
L->data[i]= e;
L->length++;
return 1;
}
int ListDelete(SqList *&L,int i,int &e)//删除指定位置的元素
{
int j;
if (i<1 || i>L->length)
return 0;
i--;//将顺序表位序转化为elem下标*/
e=L->data[i];
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return 1;
}
int main(void)
{
int k= 0;
int n= 10;
SqList *list;
InitList(list);
int a[MAXSIZE];
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
CreatList(list,a,n);
DisList(list);
ListDelete(list,5,k);
DisList(list);
DestroyList(list);
}


[解决办法]
直接用vector不就完了,费那事干啥,数组也可以插入,扩展一下大小,插入位置前的复制到新数组,插入的赋给插入位置,后边的复制到后边,删除旧数组,累不累?

热点排行
Bad Request.