线性表的顺序存储结构

#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Elemtype;
typedef struct//定义一个结构体,只是告诉编译器结构体变量内部的布局,并不会生成在实际的代码或内存中
{
Elemtype* elem;
int length;
int listsize;
const static int a = 0;
}sqlist;
bool InitList(sqlist& L)
{
L.elem = (Elemtype*)malloc(sizeof(Elemtype)*LIST_INIT_SIZE);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return true;
}
bool InsertList(sqlist&L,int i,Elemtype elem)
{
if (i<1 || i>L.length+1)
return false;
if (L.length >= L.listsize)
{
Elemtype* p = (Elemtype*)malloc(sizeof(Elemtype)*LISTINCREMENT + L.listsize);
for (int i = 1; i <= L.listsize; i++)
{
p[i-1] = L.elem[i - 1];
}
//p[i-1] = elem;
free(L.elem);
L.elem = p;
//p = NULL;
L.listsize += L.listsize + LISTINCREMENT;
}
Elemtype temp=L.elem[i - 1];
if (i==L.length+1)
L.elem[i - 1] = elem;
else
{
for (int j = L.length+1; j > i; j--)
{
L.elem[j-1] = L.elem[j - 2];
}
L.elem[i - 1] = elem;
}
L.length++;


return true;
}
Elemtype listdelete(sqlist& L, int i)
{
if (i<1 || i>L.length)
return false;
Elemtype temp= L.elem[i-1];
for (int j = i; j < L.length; j++)
{
L.elem[j - 1] = L.elem[j];
}
L.length--;
return temp;
}
int listfind(sqlist& L, Elemtype elem)
{
int loc;
for (int i = 1; i <= L.length; i++)
{
Elemtype temp = L.elem[i-1];
if (temp == elem)
{
loc = i;
break;
}
}
if (loc <= L.length)
return loc;
else
return 0;
}
void listmerge(sqlist& L1, sqlist& L2,sqlist& L3)
{
L3.elem = (Elemtype*)malloc(sizeof(Elemtype)*(L1.length + L2.length));
L3.listsize=L3.length = (L1.length + L2.length);
Elemtype* q1 = &L1.elem[L1.length - 1];
Elemtype* q2 = &L2.elem[L2.length - 1];
Elemtype* p1 = L1.elem;
Elemtype* p2 = L2.elem;
Elemtype* p3 = L3.elem;
while(p1 <= q1&&p2 <= q2)
{
if (*p1 < *p2)
{
*p3 = *p1;
p1++;//下一个元素的指针
p3++;
}
else
{
*p3 = *p2;
p2++;
p3++;
}
}
while (p1 <= q1)
{
*p3 = *p1;
p1++;
p3++;
}
while (p2<=q2)
{
*p3 = *p2;
p2++;
p3++;
}
}
sqlist L1;//全局变量,在数据段(全局数据区)分配内存空间
int main()
{
sqlist L1;//局部变量,在栈区分配内存空间
InitList(L1);
sqlist L2;
InitList(L2);
sqlist L3;
InitList(L3);
for (int i = 1; i <= 10; i++)
{
InsertList(L1, i, i);
InsertList(L2, i, i + 1);
}
for (int i = 1; i <= 10; i++)
{
cout << L1.elem[i-1];
}
listdelete(L2, 2);
listdelete(L2, 2);
cout << endl;
for (int i = 1; i <= L2.length; i++)
{

cout << L2.elem[i-1]<<' ';
}
cout << endl;
cout << listfind(L2,9);
cout << listfind(L2, 11);
listmerge(L1, L2, L3);
cout << endl;
for (int i = 0; i < L3.length; i++)
{
cout << L3.elem[i]<<' ';
}
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值