线性表在顺序存储结构下的基本操作

线性表在顺序存储结构下的基本操作:

 

源代码:

 

#include <stdio.h>

#include <malloc.h>

#include <process.h>

#define OK 1

#define ERROR 0

#define OVERFLOW -1

#define maxsize 100

typedef int Elemtype;

typedef int Statue;

typedef struct Sqlist {

Elemtype *elem;

int lenth;

} Sqlist;

Statue creat(Sqlist &l,int n) {   //创建链表

printf("  请输入存储的数字:");

for(int i=0; i<n; i++) {

scanf("%d",&l.elem[i]);

l.lenth++;

}

}

Statue inti(Sqlist &l) {    //初始化链表 ( 空链表)

l.elem = new Elemtype[10];

if(!l.elem)

exit(ERROR);

l.lenth=0;

return OK;

}

void trave(Sqlist l) {           //遍历

printf("   链表的长度:  %d\n",l.lenth);

printf("   链表:");

for(int i=0; i<=l.lenth-1; i++) {

printf(" %d ",l.elem[i]);

}

printf("\n");

}

void getelem(Sqlist l) {    // 获取数字的位置

printf("3. 您要获取第几个数字? ");

int temp;

scanf("%d",&temp);

if(temp<=l.lenth)

printf("  第%d个数字是:%d\n",temp,l.elem[temp-1]);

else

printf("  不存在\n");

}

void insert(Sqlist &l) {   //在链表中插入元素

int in;

int innum;

printf("4. 请输入您要插入的位置:");

scanf("%d",&in);

if(in>l.lenth+1 || in< 1) {

printf("  错误\n");

return ;

}

printf("   请输入您要插入的数字:");

scanf("%d",&innum);

l.lenth++;

for(int i=l.lenth-1; i>=in-1; i--) {

l.elem[i+1]=l.elem[i];

}

l.elem[in-1]=innum;

}

 

void MergeList(Sqlist la,Sqlist lb,Sqlist &lc) {  // 归并

Elemtype *pa,*pb,*pc,*pa_end,*pb_end;

pa=la.elem;

pb=lb.elem;

lc.lenth=la.lenth+lb.lenth;

pc= lc.elem=new Elemtype[10];

pa_end=la.elem+la.lenth-1;

pb_end=lb.elem+lb.lenth-1;

while(pa<=pa_end && pb<=pb_end) {

if(*pa<=*pb)

*pc++=*pa++;

else

*pc++=*pb++;

}

while(pa<=pa_end)

*pc++=*pa++;

while(pb<=pb_end)

*pc++=*pb++;

}

 

Statue get(Sqlist l) {    // 查询链表中数字及其所在位置

Elemtype *p,*p_end;

p=l.elem;

p_end=l.elem+l.lenth-1;

int temp;

printf("  请输入查询的数字:");

scanf("%d",&temp);

int len=1;

while(*p!=temp && p<=p_end) {

*p++;

len++;

}

if(*p==temp)

printf("  数字 %d 在第 %d 位 \n",*p,len);

else

printf("  不存在\n");

}

 

void dele(Sqlist &l) {   //删除链表元素

int d,i=0;

printf("5. 请输入您要删除的数字:");

scanf("%d",&d);

while(l.elem[i]!=d) {

i++;

}

for(; i<=l.lenth-1; i++) {

l.elem[i]=l.elem[i+1];

}

l.lenth--;

 

}

 

int main() {

Sqlist la,lb,lc;

int n;

if(inti(la))

printf("1. 初始化成功\n");

printf("\n");

printf("2. 请输入链表的长度: ");

scanf("%d",&n);

creat(la,n);

printf("\n");

trave(la);

printf("\n");

getelem(la);

printf("\n");

insert(la);

trave(la);

printf("\n");

dele(la);

trave(la);

printf("\n");

inti(lb);

printf("  请输入链表的长度: ");

scanf("%d",&n);

creat(lb,n);

MergeList(la,lb,lc);

printf("6.  归并\n\n");

trave(lc);

get(lc);

return 0;

}

 

运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值