线性表在顺序存储结构下的基本操作:
源代码:
#include
#include
#include
#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
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;
}
运行结果: