线性表之赋值插入操作
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 100 //存储空间的初始分配量
#define LISTIN 10 //存储空间的分配增量
typedef int ElemType;
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的储存容量,可改变
}Sqlist;
//构建一个空的线性表L
int InitList(Sqlist &L)
{
L.elem = (ElemType *)malloc(LISTSIZE * sizeof(ElemType)); //分配存储单元
if(!L.elem)
return -1; //空间分配失败
L.length = 0; //空表长度为 0
L.listsize = LISTSIZE; //初始化存储容量
return 0;
}
//线性表中插入元素 (在第i之前的位置插入e)
int ListInsert(Sqlist &L,int i,ElemType e)
{
if(i<1||i>L.length+1) //判断插入位置的合法性
return -1;
if(L.length>=L.listsize)
{
ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTIN)*sizeof(ElemType)); //重新分配
if(!newbase)
return -1; //分配空间失败
L.elem = newbase; //新基址
L.listsize += LISTIN; //增加储存容量
}
ElemType *p,*q;
q = &(L.elem[i-1]); //q为插入位置
for(p = &(L.elem[L.length-1]);p>=q;--p) //插入位置之后的元素后移
*(p+1) = *p;
*q = e; //插入e
++L.length; //表长增加 1
return 0;
}
int main()
{
Sqlist list;
InitList(list); //建空表
int a_len,charu,shu;
printf("首先输入线性表元素的个素,然后输入相应的元素,第二行输入插入的位置以及元素\n");
scanf("%d",&a_len); //输入线性表的长度
for(int i = 0;i<a_len;i++)
{
scanf("%d",&list.elem[i]);
list.length++; //当前长度递增
}
scanf("%d %d",&charu,&shu );
ListInsert(list,charu,shu); //插入元素
for (int i = 0; i < list.length;i++) //输出线性表的元素
{
printf("%d ", list.elem[i]);
}
printf("\n");
}
实现效果如图所示
顺序表之删除操作
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 100 //存储空间的初始分配量
#define LISTIN 10 //存储空间的分配增量
typedef int ElemType;
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的储存容量,可改变
}Sqlist;
//构建一个空的线性表L
int InitList(Sqlist &L)
{
L.elem = (ElemType *)malloc(LISTSIZE * sizeof(ElemType)); //分配存储单元
if(!L.elem)
return -1; //空间分配失败
L.length = 0; //空表长度为 0
L.listsize = LISTSIZE; //初始化存储容量
return 0;
}
//删除线性表某一元素 (删除第i个元素并用e返回)
ElemType ListDelete(Sqlist &L,int i,ElemType &e)
{
if(i<1||i>=L.length) //判断i的合法性
return -1;
ElemType *p,*q;
p = &(L.elem[i-1]); //p为被删除元素的位置
e = *p;
q = L.elem+L.length-1; //q为表尾元素的位置
for(++p;p<=q;++p)
{
*(p-1) = *p; //p后的所有元素往后移
}
--L.length; //表长减1
return 0;
}
int main()
{
Sqlist list;
InitList(list); //建空表
int a_len,m,n;
printf("首先输入线性表元素的个素,然后输入相应的元素\n");
scanf("%d",&a_len); //输入线性表的长度
for(int i = 0;i<a_len;i++)
{
scanf("%d",&list.elem[i]);
list.length++; //当前长度递增
}
printf("删除的元素位置为:");
scanf("%d",&m);
ListDelete(list,m,n); //删除第m个位置的元素
printf("删除的元素为:%d\n",n);
printf("现在所有的元素为:");
for (int i = 0; i < list.length;i++) //输出线性表的元素
{
printf("%d ", list.elem[i]);
}
printf("\n");
}
实现效果如图所示: