//顺序表,数组存储
#include <stdio.h>
#include <malloc.h>
#define Signal_Size 100 //定义存储空间的大小
#define Increase_Size 10 //增加分配空间的大小
typedef struct //结构体定义
{
int * element; //顺序表的首地址
int length; //当前元素长度
int max_Length; //顺序表的总长度
}SeqList;
void Init_SeqList(SeqList&L) //初始化表
{
L.element = (int*)malloc(sizeof(int)*Signal_Size);
L.length = 0;
L.max_Length = Signal_Size;
}
int SeqList_Length(SeqList L) //求顺序表当前长度
{
return L.length;
}
int SeqList_Empty(SeqList L) //判断顺序表是否为空
{
if(0 == L.length)
return 1; //为空
else
return 0; //非空
}
/*void Insert_first_SeqList(SeqList&L,int n) //在首位插入一个元素
{
if(L.length == 0)
{
L.element[0] = n;
L.length++;
}
else
printf("不是首位,不能插入");
}*/
void SeqList_Insert_last(SeqList&L,int num) //在顺序表最后插入一个元素
{
//判断是否超出表的长度,超出,则增加表的长度
int *p;
int i=0;
if(L.length <= L.max_Length) //?
{
L.element[L.length] = num;
L.length++;
}
else //重新分配空间
{
//没有测试是不是分配了新的空间
p = (int*)realloc(L.element,sizeof(int)*(Signal_Size+Increase_Size));
//原来元素移植到现在分配的空间
for(i=0;i<L.length;i++)
p[i] = L.element[i];
L.element = p;
}
}
void SeqList_Insert(SeqList&L,int num,int n) //插入第n个元素num
{
//判断分配的空间是否满了,满了,则扩充新的空间
int *p;
int *q;
int i = 0;
/*if(L.length>L.max_Length) //有问题
{
q = (int*)realloc(L.element,sizeof(int)*(Signal_Size+Increase_Size));
//原来元素移植到现在分配的空间
for(i=0;i<L.length;i++)
q[i] = L.element[i];
L.element = q;
//
p = & L.element[n-1];
for(i=L.length-1;i--;i>n)
L.element[i+1] = L.element[i];
*p = num;
L.length++;
}*/
if(L.length < n) //n大于表的长度,则在末尾添加
{
SeqList_Insert_last(L,num);
L.length++;
}
else //在n的位置处添加
{
p = & L.element[n-1];
for(i=L.length-1;i--;i>n)
L.element[i+1] = L.element[i];
*p = num;
L.length++;
}
}
int SeqList_Delete(SeqList&L,int n) //删除表第n个元素,不存在,则返回0
{
int *p;
int i=0;
if(n <= L.length)
{
p = &L.element[n-1];
for(i=n-1;i<L.length-1;i++)
L.element[i] = L.element[i+1];
L.length--;
}
else
return 0;
}
int SeqList_GetElement(SeqList L,int n) //获取列表n位置处一个元素
{
if(n>L.length)
return 0;
else
return L.element[n-1] ;
}
void Clear_SeqList(SeqList&L) //清除列表元素,保留空间
{
L.length = 0;
}
void Destroy_SeqList(SeqList&L) //释放列表申请空间
{
free(L.element);
}
void union_SeqList(SeqList L1,SeqList L2,SeqList&L3) //把两个列表连接在一起,并排序
{
}
int main()
{
int i = 0; //遍历顺序表
int k = 0; //选择第k个元素
int length; //顺序表长度
SeqList a;
Init_SeqList(a);
//插入元素
SeqList_Insert_last(a,10);
SeqList_Insert_last(a,11);
SeqList_Insert_last(a,12);
SeqList_Insert_last(a,14);
//删除元素
SeqList_Delete(a,2);
//判断列表是否为空
if(SeqList_Empty(a))
printf("a为空\n");
else
printf("a不为空\n");
//依次输出列表元素
for(i;i<a.length;i++)
printf("%d\n",a.element[i]);
//求当前顺序表长度
length = SeqList_Length(a);
//输出列表长度
printf("%d\n",length);
//获取当前表的某个元素
k = 2;
printf("第%d个元素为%d\n",k,SeqList_GetElement(a,k));
//Destroy_SeqList(a);
//清除表元素
Clear_SeqList(a);
printf("%d",a.length);
while(1);
return 0;
}
#include <stdio.h>
#include <malloc.h>
#define Signal_Size 100 //定义存储空间的大小
#define Increase_Size 10 //增加分配空间的大小
typedef struct //结构体定义
{
int * element; //顺序表的首地址
int length; //当前元素长度
int max_Length; //顺序表的总长度
}SeqList;
void Init_SeqList(SeqList&L) //初始化表
{
L.element = (int*)malloc(sizeof(int)*Signal_Size);
L.length = 0;
L.max_Length = Signal_Size;
}
int SeqList_Length(SeqList L) //求顺序表当前长度
{
return L.length;
}
int SeqList_Empty(SeqList L) //判断顺序表是否为空
{
if(0 == L.length)
return 1; //为空
else
return 0; //非空
}
/*void Insert_first_SeqList(SeqList&L,int n) //在首位插入一个元素
{
if(L.length == 0)
{
L.element[0] = n;
L.length++;
}
else
printf("不是首位,不能插入");
}*/
void SeqList_Insert_last(SeqList&L,int num) //在顺序表最后插入一个元素
{
//判断是否超出表的长度,超出,则增加表的长度
int *p;
int i=0;
if(L.length <= L.max_Length) //?
{
L.element[L.length] = num;
L.length++;
}
else //重新分配空间
{
//没有测试是不是分配了新的空间
p = (int*)realloc(L.element,sizeof(int)*(Signal_Size+Increase_Size));
//原来元素移植到现在分配的空间
for(i=0;i<L.length;i++)
p[i] = L.element[i];
L.element = p;
}
}
void SeqList_Insert(SeqList&L,int num,int n) //插入第n个元素num
{
//判断分配的空间是否满了,满了,则扩充新的空间
int *p;
int *q;
int i = 0;
/*if(L.length>L.max_Length) //有问题
{
q = (int*)realloc(L.element,sizeof(int)*(Signal_Size+Increase_Size));
//原来元素移植到现在分配的空间
for(i=0;i<L.length;i++)
q[i] = L.element[i];
L.element = q;
//
p = & L.element[n-1];
for(i=L.length-1;i--;i>n)
L.element[i+1] = L.element[i];
*p = num;
L.length++;
}*/
if(L.length < n) //n大于表的长度,则在末尾添加
{
SeqList_Insert_last(L,num);
L.length++;
}
else //在n的位置处添加
{
p = & L.element[n-1];
for(i=L.length-1;i--;i>n)
L.element[i+1] = L.element[i];
*p = num;
L.length++;
}
}
int SeqList_Delete(SeqList&L,int n) //删除表第n个元素,不存在,则返回0
{
int *p;
int i=0;
if(n <= L.length)
{
p = &L.element[n-1];
for(i=n-1;i<L.length-1;i++)
L.element[i] = L.element[i+1];
L.length--;
}
else
return 0;
}
int SeqList_GetElement(SeqList L,int n) //获取列表n位置处一个元素
{
if(n>L.length)
return 0;
else
return L.element[n-1] ;
}
void Clear_SeqList(SeqList&L) //清除列表元素,保留空间
{
L.length = 0;
}
void Destroy_SeqList(SeqList&L) //释放列表申请空间
{
free(L.element);
}
void union_SeqList(SeqList L1,SeqList L2,SeqList&L3) //把两个列表连接在一起,并排序
{
}
int main()
{
int i = 0; //遍历顺序表
int k = 0; //选择第k个元素
int length; //顺序表长度
SeqList a;
Init_SeqList(a);
//插入元素
SeqList_Insert_last(a,10);
SeqList_Insert_last(a,11);
SeqList_Insert_last(a,12);
SeqList_Insert_last(a,14);
//删除元素
SeqList_Delete(a,2);
//判断列表是否为空
if(SeqList_Empty(a))
printf("a为空\n");
else
printf("a不为空\n");
//依次输出列表元素
for(i;i<a.length;i++)
printf("%d\n",a.element[i]);
//求当前顺序表长度
length = SeqList_Length(a);
//输出列表长度
printf("%d\n",length);
//获取当前表的某个元素
k = 2;
printf("第%d个元素为%d\n",k,SeqList_GetElement(a,k));
//Destroy_SeqList(a);
//清除表元素
Clear_SeqList(a);
printf("%d",a.length);
while(1);
return 0;
}