顺序表(删除 、查找、插入、合并、输出)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100


typedef int ElemType;
typedef struct {
ElemType elem[MAXSIZE];
int length;
}SeqList;


void CreateSeqList(); //创建
void InsertSeqList(); //插入
void DeleteSeqList(); //删除
void LocationSeqList(); //查找(位置)
void ValueSeqList(); //查找(元素)
void MergeSeqList(); //合并
void Print(); //输出


void main () {
SeqList *l = NULL;
SeqList *s = NULL;
SeqList *t = NULL;
l = (SeqList *)malloc(sizeof(SeqList));
s = (SeqList *)malloc(sizeof(SeqList));
t = (SeqList *)malloc(sizeof(SeqList));
CreateSeqList(l);
Print(l);
// CreateSeqList(s);
// Print(s);
// InsertSeqList(l);
// Print(l);
// DeleteSeqList(l);
// Print(l);
// LocationSeqList(l);
// ValueSeqList(l);
// MergeSeqList(l, s, t);
// Print(t);
}


void CreateSeqList(SeqList *l) {
int i;
printf("请输入顺序表中的元素(输入0为退出):\n");
for (i = 1; ;i++) {
printf("第%d位元素:",i);
scanf("%d",&l->elem[i-1]);
if (l->elem[i-1] == 0) 
break;
}
l->length = i-1;
}


void InsertSeqList(SeqList *l){
int i, k, num;
char c;
while (1) {
if (l->length == MAXSIZE-1) {
printf("表满\n");
}
printf("设置放置的位置:");
scanf("%d",&k);
if (k < 1 || k > l->length+1) {
printf("放置的位置不正确\nl->length = %d",l->length);
}
printf("放置的元素:");
scanf("%d",&num);
for (i = l->length; i >= k; i--) {
l->elem[i] = l->elem[i-1];
}
l->elem[k-1] = num;
l->length ++;
fflush(stdin);
printf("是否继续放置元素(y/n):");
scanf("%c",&c);
if (c == 'n' || c == 'N') 
break;
}
}


void DeleteSeqList(SeqList *l) {
int i, k;
char c;
while (1) {
if (l->length == 0) 
printf("表空\n");
printf("设置删除的位置:");
scanf("%d",&k);
if (k < 1 || k > l->length)
printf("删除位置不正确\nl->length = %d\n",l->length);
for (i = k; i < l->length; i++) 
l->elem[i-1] = l->elem[i];
l->length--;
Print(l);
fflush(stdin);
printf("是否继续删除(y/n):");
scanf("%c",&c);
if (c == 'n' || c == 'N')
break;
}
}


void LocationSeqList(SeqList *l) {
int i, j, k;
char c;
while (1) {
if (l->length == 0) 
printf("表空");
printf("设置查找的位置:");
scanf("%d",&k);
if (k < 1 || k >l->length) 
printf("查找位置不正确\nl->length = %d\n",l->length);
for (i = 1; i <= l->length; i++) 
if (k == i) 
printf("第%d位元素 : %d\n",k,l->elem[i-1]);
else 
j = 1;
if (j == 1) 
printf("查询不到,请检查一下后再进行查询\n");
else
printf("很抱歉,系统正在维护中...\n");
fflush(stdin);
printf("是否继续查找(y/n):");
scanf("%c",&c);
if (c == 'n' || c == 'N')
break;
}
}


void ValueSeqList(SeqList *l) {
int i, j, k;
char c;
while (1) {
if (l->length == 0)
printf("表空\n");
printf("请输入查询的元素:");
scanf("%d",&k);
for (i = 0; i < l->length; i++) 
if (k == l->elem[i]) 
printf("%d为第%d位元素\n",k,i+1);
else 
j = 1;
if (j == 1) 
printf("查询不到,请检查一下后再进行查询\n");
else 
printf("很抱歉,系统正在维护中...");
fflush(stdin);
printf("是否继续查询(y/n):");
scanf("%c",&c);
if (c == 'n' || c == 'N') 
break;
}
}


void MergeSeqList(SeqList *a, SeqList *b, SeqList *c) {
int i, j, k;
i = 0;
j = 0;
k = 0;
if (a->length == 0 || b->length == 0) 
printf("两个表都为空\n");
while (i < a->length && j < b->length)
if (a->elem[i] < b->elem[j])
c->elem[k++] = a->elem[i++];
else
c->elem[k++] = b->elem[j++];
while (i < a->length)
c->elem[k++] = a->elem[i++];
while (j < b->length) 
c->elem[k++] = b->elem[j++];
c->length = a->length + b->length;
}


void Print(SeqList *l) {
int i;
for (i = 0; i < l->length; i++) 
printf("第%d位元素 : %d\n",i+1,l->elem[i]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值