实验要求
(0)顺序表的初始化
(1)顺序表的输入函数(注意:当线性表长度超出容量,则每次多开辟5个内存单位)
(2)顺序表的输出函数
(3)顺序表的插入函数
(4)顺序表的删除函数
(5)顺序表的按值查找函数
(6)顺序表的排序函数
(7)顺序表的合并函数
(8)动态顺序表的扩容函数
Sequence.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ERROR 0
#define OK 1
#define N 5
typedef int ElemType;
typedef struct SqList
{
ElemType *p;
int Length;
int Max;
char data;
}SqList;
ElemType SqList_Init(SqList *t);
ElemType SqList_Add(SqList *t) ;
void SqList_In(SqList *t);
ElemType SqList_Find(SqList *t,int key);
ElemType SqList_Merge(SqList *t);
void SqList_Sort( int a[] );
ElemType SqList_Out(SqList *t);
ElemType SqList_Init(SqList *t)
{
t->p=(ElemType*)malloc(sizeof(ElemType)*N);
if(t->p==NULL)
{
return ERROR;
}
else
{
t->Length=0;
t->Max=N;
return OK;
}
}
void SqList_In(SqList *t)
{
int data;
int q=t->Length;
char i;
printf("请输入数据:");
do
{
scanf("%d",&data);
t->p[q]=data;
t->Length++;
SqList_Add(t);
q++;
}
while((i=getchar())!='\n');
}
ElemType SqList_Add(SqList *t)
{
if(t->Length==t->Max)
{
t->p = (ElemType*)realloc(t->p,sizeof(ElemType)*(t->Max+N));
if(t->p==NULL)
{
return ERROR;
}
else
{
t->Max=t->Max+N;
return OK;
}
}
}
ElemType SqList_Find(SqList *t,int key)
{
int i=0;
for(;i<t->Length;i++)
{
if(t->p[i]==key)
{
printf("您查找的元素首次在第%d位出现\n",++i);
return i;
}
}
printf("没有找到你所要查询的元素。\n");
}
ElemType SqList_Out(SqList *t)
{
int i;
printf("您当前输入的数据为:\n");
for(i=0;i<t->Length;i++)
{
printf("%2d ",t->p[i]);
}
printf("\n");
return OK;
}
void SqList_Sort(SqList *t)
{
int i,j,k;
for(j=0;j<t->Length;j++)
{
for(i=0;i<t->Length-1-j;i++)
{
if(t->p[i]>t->p[i+1])
{
k=t->p[i];
t->p[i]=t->p[i+1];
t->p[i+1]=k;
}
}
}
printf("排序完的元素为:\n");
for(i=0;i<t->Length;i++)
{
printf("%2d",t->p[i]);
}
printf("\n");
}
ElemType SqList_Insert(SqList *t,int L)
{
int i,j=0;
int n;
i=t->Length;
for(;j<i;j++)
{
if(j==L-1)
{
for(int k=t->Length;k>j-1;k--)
{
t->p[k+1]=t->p[k];
}
t->Length++;
SqList_Add(t);
printf("请输入您要插入的元素:\n");
scanf("%d",&n);
t->p[L-1]=n;
}
}
printf("您要插入元素后的结果为:\n");
for(i=0;i<t->Length;i++)
{
printf("%2d",t->p[i]);
}
printf("\n");
return OK;
}
ElemType SqList_Merge(SqList *t)
{
int data;
int q=t->Length;
char i;
printf("请输入另一个表数据:\n");
do
{
scanf("%d",&data);
t->p[q]=data;
t->Length++;
SqList_Add(t);
q++;
}
while((i=getchar())!='\n');
return OK;
}
main.c
#include"Sequence.h"
int main()
{
SqList T;
int Key;
int L;
SqList_Init(&T);
SqList_In(&T);
SqList_Out(&T);
printf("请输入您要查找的元素:\n");
scanf("%d",&Key);
SqList_Find(&T,Key);
printf("请输入您要插入元素的位置:\n");
scanf("%d",&L);
SqList_Insert(&T,L);
SqList_Merge(&T);
SqList_Sort(&T);
}
测试运行结果: