世 上 没 有 绝 望 的 处 境 只 有 对 处 境 绝 望 的 人
数据结构笔记-线性表及其操作
本博客只为记录,以及对与一些学习线性表的同志提供代码资源20201007
顺序表
#include<stdio.h>
#include<stdlib.h>
#define Init_size 10
#define Increase 10
typedef struct node
{
int *save
;
int now_size
;
int tot_size
;
} Sqlist
;
void init(Sqlist
*temp
)
{
temp
->save
=(int*)malloc(sizeof(Sqlist
)*Init_size
);
if(!temp
->save
)
{
puts("运行错误!");
exit(0);
}
temp
->now_size
=0;
temp
->tot_size
=Init_size
;
}
void add(Sqlist
*L
,int num
)
{
if(L
->now_size
==L
->tot_size
)
{
L
->tot_size
+=Increase
;
int* new_base
=(int*)realloc(L
->save
,sizeof(Sqlist
)*L
->tot_size
);
if(!new_base
)
{
puts("运行错误!");
exit(0);
}
L
->save
=new_base
;
}
L
->save
[L
->now_size
++]=num
;
}
void merge(Sqlist a
,Sqlist b
,Sqlist
*ans
)
{
int now_a
=0,now_b
=0;
while(now_a
!=a
.now_size
&&now_b
!=b
.now_size
)
{
if(a
.save
[now_a
]<b
.save
[now_b
])
add(ans
,a
.save
[now_a
++]);
else
add(ans
,b
.save
[now_b
++]);
}
while(now_a
<a
.now_size
)
add(ans
,a
.save
[now_a
++]);
while(now_b
<b
.now_size
)
add(ans
,b
.save
[now_b
++]);
}
int main()
{
Sqlist a
,b
,ans
;
int n
,m
,num
,i
;
scanf("%d%d",&n
,&m
);
init(&a
);
init(&b
);
init(&ans
);
for(i
=0; i
<n
; i
++)
{
scanf("%d",&num
);
add(&a
,num
);
}
for(i
=0; i
<m
; i
++)
{
scanf("%d",&num
);
add(&b
,num
);
}
merge(a
,b
,&ans
);
for(i
=0; i
<ans
.now_size
; i
++)
{
printf("%d",ans
.save
[i
]);
if(i
==ans
.now_size
-1)
putchar('\n');
else
putchar(' ');
}
return 0;
}
链表
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
struct node
*next
;
int data
;
} Lnode
,*Linklist
;
Linklist
init()
{
Linklist head
=(Linklist
)malloc(sizeof(Lnode
));
if(!head
)
{
puts("运行错误!");
exit(0);
}
head
->next
=NULL;
return head
;
}
Linklist
add(Linklist now
,int num
)
{
Linklist new_note
=(Linklist
)malloc(sizeof(Lnode
));
if(!new_note
)
{
puts("运行错误!");
exit(0);
}
new_note
->data
=num
;
new_note
->next
=now
->next
;
now
->next
=new_note
;
return new_note
;
}
void reverse(Linklist L
)
{
Linklist temp
;
Linklist now
=L
->next
;
Linklist pre
=L
;
while(now
!=NULL)
{
temp
=now
->next
;
now
->next
=pre
;
pre
=now
;
now
=temp
;
}
L
->next
->next
=NULL;
L
->next
=pre
;
}
void display(Linklist L
)
{
Linklist now
=L
->next
;
printf("%d",now
->data
);
now
=now
->next
;
for(; now
!=NULL; now
=now
->next
)
printf(" %d",now
->data
);
puts("");
}
Linklist
merge(Linklist A
,Linklist B
)
{
Linklist L
=init(),P
,now1
=A
->next
,now2
=B
->next
;
P
=L
;
while(now1
!=NULL&&now2
!=NULL)
{
if(now1
->data
<now2
->data
)
{
P
=add(P
,now1
->data
);
now1
=now1
->next
;
}
else
{
P
=add(P
,now2
->data
);
now2
=now2
->next
;
}
}
while(now1
!=NULL)
{
P
=add(P
,now1
->data
);
now1
=now1
->next
;
}
while(now2
!=NULL)
{
P
=add(P
,now2
->data
);
now2
=now2
->next
;
}
return L
;
}
int main()
{
Linklist A
=init(),B
=init(),ans
;
Linklist P1
=A
,P2
=B
;
int n
,m
,num
,i
;
printf("请输入A和B链表的长度:\n");
scanf("%d%d",&n
,&m
);
for( i
=0; i
<n
; i
++)
{
scanf("%d",&num
);
P1
=add(P1
,num
);
}
for( i
=0; i
<m
; i
++)
{
scanf("%d",&num
);
P2
=add(P2
,num
);
}
display(A
);
display(B
);
reverse(A
);
display(A
);
ans
=merge(A
,B
);
display(ans
);
}
By-轮月
转载请注明原文地址:https://blackberry.8miu.com/read-45000.html