c语言实现顺序表的插入,删除和求给定元素在表中的位序等运算

/*在顺序表中插入与删除数据*/
#include
#include
#define LIST_SIZE 100/*初始长度*/
#define LIST_INCREMENT 10/*长度增量*/
typedef char ElemType;

/*定义顺序表类型*/
typedef struct{
        ElemType *elem;
        int length;
        int listsize;
}SqList;

SqList L;

SqList* InitiaList()
{
        L.elem=(ElemType *)malloc(LIST_SIZE*sizeof(ElemType));
        if(!L.elem)
        {
                printf("溢出,扩展空间失败!");
                return 0;
        }
        L.length=0;/*长度为0*/
        L.listsize=LIST_SIZE;/*分配的内存空间为LIST_SIZE*/
        return &L;
}

void DestroyList(SqList *L)
{
        free(L->elem);
}

/*在顺序表L中第i个位置插入元素e*/
int ListInsert(SqList *L,int i,ElemType e)
{
        int j;
        ElemType *newbase;
        if(i<1||i>L->length+1)
        {
                printf("位置不合法");
                return 0;
        }
        if(L->length==L->listsize)
        {
        newbase=(ElemType*)realloc(L->elem,(L->listsize+LIST_INCREMENT)*sizeof(ElemType));
                if(!newbase)
                {
                        printf("溢出,扩展空间失败!");
                        return 0;
                }
  L->elem=newbase;
                L->listsize+=LIST_INCREMENT;
        }
        i--;/*将位序参数转化为数组下标*/
        for(j=L->length-1;j>i;j--)
        {
                L->elem[j+1]=L->elem[j];/*后移元素*/
        }
        L->elem[i]=e;/*插入元素*/
        L->length++;
        return 1;
}

/*在顺序表L中删除第i个元素*/
int ListDelete(SqList *L,int i)
{
        int j;
        if(L->length==0)
        {
                printf("这是一个空表,无法删除!");
                return 0;
       }
        i--;
        for(j=i;jlength-1;j++)
        {
                L->elem[j]=L->elem[j+1];
        }
        L->length--;
        return 1;
}

/*输出顺序表L*/
void ListTraverse(SqList *L)
{
        int i;
        if(L->length==0)
                printf("空表!");
        else
        {
            for(i=0;ilength;i++)
                        printf("%c ",L->elem[i]);
        }
        printf("\n");
}

/*在线性表L中确定第一个与参数e等于/小于/大于的元素位序,f=0等于,f=1小于,f=2大于*/
void LocatElem(SqList *L,ElemType e,int f)
{
        int i;
        switch(f)
        {
        case 0:
                for(i=0;ilength;i++)
                        if(L->elem[i]==e)
                        {
                                i=i+1;
                                break;
                        }
                break;
        case 1:
                for(i=0;ilength;i++)
                        if(L->elem[i]length;i++)
                        if(L->elem[i]>e)
                        {
                                i=i+1;
                                break;
                        }
                break;
        default:
                printf("参数错误!");
        }
        if(ilength)
        {
                printf("所比较元素的关系位于第%d\n",i);
        }
        else
        {
                printf("不能比较!");
        }
}

/*根据参数a的值选择子函数执行*/
void chose(int a)
{
      int n,i,m;
        ElemType e;
        switch(a)
        {
        case 1:
                InitiaList();
                ListTraverse(&L);
                break;
        case 2:
                printf("请输入插入元素个数:");
                scanf("%d",&n);
                getchar();
                for(i=0;i

 

#include
#include
using namespace std;

typedef int ElemType;
#define OK 1
#define ERROR 0
typedef int Status;

#define LIST_INIT_SIZE 20
#define LISTINCREMENT 10
typedef struct{
	ElemType *elem;
	int length;
	int listsize;
}SqList;

/*顺序表的初始化*/
Status InitList_Sq(SqList &L)
{
	L.elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
	if(!L.elem)
	{
		cout<<"存储空间分配失败!"<L.length+1)
	{
		cout<<"插入位置不合适!"<L.listsize)
	{
		ElemType* newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
		if(!newbase)
		{
			cout<<"重新分配内存错误!"<=q;p--)
		*(p+1)=*p;
	*q=e;
	++L.length;
	return OK;
}

/*删除线性表中第i个位置的元素,并用e返回该元素*/
Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{
	if(i<1||i>L.length)
	{
		cout<<"删除位置不合适!"<Lb.elem[j])
		{
			Lc.elem[k]=Lb.elem[j];
			j++;
		}
		else if(La.elem[i]==Lb.elem[j])
		{
			Lc.elem[k]=Lb.elem[j];
			j++;
			i++;
		}
		else
		{
			Lc.elem[k]=La.elem[i];
			i++;
		}
		k++;
		Lc.length++;
	}
	while(i



 

你可能感兴趣的:(数据结构)