学到了线性表,写了一下,说起来其实就是对数组进行操作。相对链表还是比较简单的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int MAX=20;
struct SqList
{
int a[MAX];
int len;
}sq;
void creat_list(SqList*);
void out_list(SqList);
void insert_sq(SqList*,int,int);
int delete_sq(SqList*,int);
int locat_sq(SqList,int);
int main(int argc, char *argv[])
{
int k;
do{
printf("\n\n\n");
printf("======================================\n\n");
printf(" 1.建立线性表\n");
printf(" 2.在i位置插入元素e\n");
printf(" 3.删除第i个元素,返回其值\n");
printf(" 4.查找为e的元素\n");
printf(" 6.结束程序运行\n\n");
printf("======================================\n\n");
printf(" 请输入你的选择1/2/3/4/6\n");
cin>>k;
switch(k)
{
case 1:
{
creat_list(&sq);
out_list(sq);
}break;
case 2:
{
printf("\n i,e=?");
int i,e;
cin>>i>>e;
insert_sq(&sq,i,e);
out_list(sq);
}break;
case 3:
{
printf("\n i=?");
int i;
cin>>i;
int x=delete_sq(&sq,i);
out_list(sq);
printf("\n x=%d",x);
}break;
case 4:
{
printf("\n e=?");
int e;
cin>>e;
int t=locat_sq(sq,e);
if(t==-1)
printf("\n 找不到\n");
else
printf("\n 已找到,位置为:%d",t);
}break;
}
}while(k!=6);
printf("\n-------------Bye bye~\n");
printf("\n\n\n\n");
printf("给你一次按ENTER结束进程的机会\n");
char ch=getchar();
return 0;
}
void creat_list(SqList*L)
{
printf("\n n=");
cin>>(L->len);
for(int i=0;i<L->len;i++)
cin>>(L->a[i]);
}
void out_list(SqList L)
{
printf("\n");
for(int i=0;i<L.len;i++)
printf("%d ",L.a[i]);
printf("\n\n 按ENTER继续");
int ch=getchar();
}
void insert_sq(SqList*L,int i,int e)
{
if(L->len==MAX)
printf("\n overflow!");
else if(i<1||i>L->len+1)
printf("\n error i!!!");
else
{
for(int j=L->len-1;j>=i-1;j--)
L->a[j+1]=L->a[j];
L->a[i-1]=e;
L->len++;
}
}
int delete_sq(SqList*L,int i)
{
int x;
if(L->len==0)
printf("\n 空表!");
else if(i<1||i>L->len)
{
printf("\n error i!!!");
x=-1;
}
else
{
x=L->a[i-1];
for(int j=i-1;j<L->len;j++)
L->a[j]=L->a[j+1];
L->len--;
}
return x;
}
int locat_sq(SqList L,int e)
{
int i=0;
while(i<L.len&&L.a[i]!=e)
i++;
if(i<L.len)
return i+1;
else
return -1;
}