顺序表的按内容查找运算
#include <stdio.h>
#define MAX 100
typedef struct seqlist{
int elem[MAX];
int last;
}SeqList;
int LocateList(SeqList L,int e)
{
int i=0;
while(i<=L.last&&L.elem[i]!=e){
i++;
}
if(i<=L.last){
return i+1;
}else {
return -1;
}
}
int main()
{
SeqList L;
int n;
printf("请输入顺序表元素的个数:");
scanf("%d",&n);
int i=0;
printf("请输入顺序表的元素:")
for(i=0;i<=n-1;i++){
scanf("%d",&L.elem[i]);
L.last=i;
}
int e;
printf("请输入你需要查询的元素:");
scanf("%d",&e);
int locate=LocateList(L,e);
if(locate!=-1){
printf("你所查询的元素位于第%d个位置",locate);
}else {
printf("抱歉,未能找到你所需要查询的元素");
}
return 0;
}
顺序表的插入运算
#include <stdio.h>
#define MAX 100
#define OK 1
#define ERROR 0
typedef struct seqlist{
int elem[MAX];
int last;
}SeqList;
int InsList(SeqList *L,int i,int e){
if(i<1||i>L->last+2){
printf("插入i值不合法!");
return ERROR;
}
if(L->last>=MAX-1){
printf("表已满,无法插入!");
return ERROR;
}
int k=L->last;
for(k=L->last;k>=i-1;k--){
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->last++;
return OK;
}
int main()
{
SeqList L;
int n;
printf("请输入顺序表元素的个数:");
scanf("%d",&n);
int i=0;
printf("请输入顺序表的元素:");
for(i=0;i<=n-1;i++){
scanf("%d",&L.elem[i]);
L.last=i;
}
int x,e;
printf("请输入元素插入的位置:");
scanf("%d",&x);
printf("请输入需要插入的元素:");
scanf("%d",&e);
int inslist=InsList(&L,x,e);
if(inslist==1){
printf("恭喜你,插入元素成功!插入后的顺序表为:");
for(i=0;i<=L.last;i++){
printf("%d ",L.elem[i]);
}
}else {
printf("抱歉,插入元素失败!");
}
return 0;
}
顺序表的删除运算
#include <stdio.h>
#define MAX 100
#define ERROR 0
#define OK 1
typedef struct seqlist{
int elem[MAX];
int last;
}SeqList;
int DelList(SeqList *L,int i,int *e){
int k;
if((i<1)||i>L->last+1){
printf("删除位置不合法!");
return ERROR;
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++){
L->elem[k-1]=L->elem[k];
}
L->last--;
return OK;
}
int main()
{
SeqList L;
int n;
printf("请输入顺序表的元素的个数:");
scanf("%d",&n);
int i=0;
printf("请输入顺序表元素的内容:");
for(i=0;i<=n-1;i++){
scanf("%d",&L.elem[i]);
L.last=i;
}
int j,e=0;
printf("请输入你所需要删除的元素的位置:");
scanf("%d",&j);
int dellist=DelList(&L,j,&e);
if(dellist==1){
printf("恭喜你删除元素成功!\n");
printf("你所删除的元素是:%d\n",e);
printf("删除后的顺序表的内容是:");
for(i=0;i<=L.last;i++){
printf("%d ",L.elem[i]);
}
}else {
printf("抱歉,你所需要删除的元素不存在");
}
return 0;
}
顺序表的合并运算
#include <stdio.h>
#define MAX 100
typedef struct seqlist{
int elem[MAX];
int last;
}SeqList;
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC){
int i=0,j=0,k=0;
while(i<=LA->last&&j<=LB->last){
if(LA->elem[i]<=LB->elem[j]){
LC->elem[k]=LA->elem[i];
i++,k++;
}else {
LC->elem[k]=LB->elem[j];
k++,j++;
}
}
while(i<=LA->last){
LC->elem[k]=LC->elem[i];
k++,j++;
}
while(j<=LB->last){
LC->elem[k]=LB->elem[j];
k++,j++;
}
LC->last=LA->last+LB->last+1;
}
int main()
{
SeqList LA,LB,LC;
int m;
printf("请输入第一个线性表的元素个数:");
scanf("%d",&m);
int i=0;
printf("请输入第一个线性表元素的内容:");
for(i=0;i<=m-1;i++){
scanf("%d",&LA.elem[i]);
LA.last=i;
}
int j=0,t=0;
for(i=0;i<=m-2;i++){
for(j=0;j<=m-2-i;j++){
if(LA.elem[j]>LA.elem[j+1]){
t=LA.elem[j+1];
LA.elem[j+1]=LA.elem[j];
LA.elem[j]=t;
}
}
}
int n;
printf("请输入第二个线性表的元素个数:");
scanf("%d",&n);
printf("请输入第二个线性表元素的内容:");
for(i=0;i<=n-1;i++){
scanf("%d",&LB.elem[i]);
LB.last=i;
}
for(i=0;i<=n-2;i++){
for(j=0;j<=n-2-i;j++){
if(LB.elem[j]>LB.elem[j+1]){
t=LB.elem[j+1];
LB.elem[j+1]=LB.elem[j];
LB.elem[j]=t;
}
}
}
mergeList(&LA,&LB,&LC);
printf("合并后的线性表的内容为:");
for(i=0;i<=m+n-1;i++){
printf("%d ",LC.elem[i]);
}
return 0;
}