#include<stdio.h>
#include<stdlib.h>
#define MAX 20 //顺序表的大小
typedef struct
{
int elem[MAX];
int length; //表长
int last; //表最后一位数据的下表
}SeqList;
//创建顺序表
SeqList Create_List()
{
SeqList L;
L.length = 0;
int i=0;
int a[5] = {1,2,3,4,5};
for(i=0; i<5; i++)
{
L.elem[i] = a[i];
L.length++;
}
L.last = L.length - 1;
return L;
}
//在第i个位置插入e
SeqList Insert(SeqList * L, int i, int e)
{
int k;
if (i<1 || i> (L->length)-2)
printf("插入位置有误,无法插入。\n");
else if (L->length == MAX)
printf("表满,无法插入元素。\n");
else
{
for (k = L->last; k >= i-1; k--)
{
L->elem[k+1] = L->elem[k];
}
L->elem[i-1] = e;
L->length++;
L->last++;
}
}
//删除第n个位置的元素
void Dellist(SeqList * L, int n)
{
int i = 0;
for (i; i<=L->length-n+1; i++ )
{
L->elem[n - 1] = L->elem[n++];
}
L->length--;
L->last = L->length - 1;
}
//打印
void Printf(SeqList L)
{
SeqList Q = L;
int i;
printf("打印表:");
for (i = 0; i < Q.length; i++)
{
printf("%d ", Q.elem[i]);
}
printf("\n");
}
//1.按序号查找
int GetData(SeqList L, int i)
{
return L.elem[i - 1];
}
//2.按内容查找
int Locate(SeqList L, int x)
{
int i;
for (i = 0; i < L.length; i++)
{
if (x == L.elem[i])
return i;
}
return -1;
}
//合并表L和L1
SeqList * mergeList(SeqList* L, SeqList * L1, SeqList * L2)
{
L2 = L;
int i, j=0;
i = L->length;
for (j; j < L1->length; j++)
{
L2->elem[i+j] = L1->elem[j];
}
L2->length = L->length + L->length;
L2->last = L2->length - 1;
return L2;
}
int main()
{
SeqList L, L1, L2;
printf("(1)创建顺序表\n");//
L=Create_List();
L1 = Create_List();
Printf(L);
printf("(2)在第2个位置插入10:\n");
Insert(&L, 2, 10);
Printf(L);
printf("(3)L中第三个元素是:%d\n", GetData(L, 3));
printf("(4)L中是否存在【10】元素,若存在它的数组下表为(不存在,则返回-1):%d\n", Locate(L, 10));
printf("(5)删除第5个元素:\n");
Dellist(&L, 5);
Printf(L);
printf("(6)合并表L和L1:\n");
L2=*mergeList(&L, &L1, &L2);
Printf(L2);
}
(第二章)线性表
最新推荐文章于 2024-08-10 07:14:43 发布