#include<iostream>// 顺序表
#include<cstdio>
#include<string>
//#include<conio.h>
#include<dos.h>// 用来清屏
using namespace std;
const int MAX_size = 1000;
typedef struct
{
int data[MAX_size];
int len;
}list;
void empty(list &l)
{
l.len = 0;
}//构造空表
void Initlist(list &l)
{
int n;
printf("/n/t/t输入顺序表的长度 n = ");
scanf("%d", &n);
l.len = n;
int i;
printf("/n/t/t输入各个元素:");
for(i = 0; i < l.len; i++)
scanf("%d", &l.data[i]);
}//构造链表
int length(list l)
{
return l.len;
}//求顺序表的长度
int get(list &l, int n)
{
if(n < 0 || n > l.len)
{
printf("/n/t/t参数位置不正确/n");
return 0;
}
return l.data[n- 1];
}//取表中第n个元素
int lacate(list l, int x)
{
int i = 0;
for(i = 0; i < l.len; i++)
if(l.data[i] == x)
return i;
return -1;//表示没有找到x
}//查找顺序表中为x的元素,返回其下表,没有的话返回-1;
int insnode(list &l, int i, int x)
{
if(i < 0 || i > l.len)
{
printf("/n/t/t插入的位置不正确/n");
return 0;
}
int j;
l.len++; //这里不要忘记了加
for(j = l.len; j >= i; j--)
l.data[j] =l.data[j - 1];
l.data[i - 1] = x;
return 1;
}//在顺序表位置为i的地方插入x
int delnode(list &l, int i)
{
if(i < 0 || i > l.len)
{
printf("/n/t/t删除的位置不正确/n");
return 0;
}
int j;
for(j = i; j < l.len; j++)
l.data[j - 1] = l.data[j];
l.len--;
return 1;
}//删除顺序表位子为i 的元素
void display(list l)
{
int i;
printf("/n/t/t");
for(i = 0; i < l.len; i++)
printf("%d ",l.data[i]);
}//显示顺序表
void fun()
{
printf("/n/t/t*********************************************************");
printf("/n/t/t********* 1 构造空表 *********");
printf("/n/t/t********* 2 构造链表 *********");
printf("/n/t/t********* 3 求顺序表的长度 *********");
printf("/n/t/t********* 4 取表中第n个元素 *********");
printf("/n/t/t********* 5 查找顺序表中为x的元素 *********");
printf("/n/t/t********* 6 顺序表位置为i的地方插入x *********");
printf("/n/t/t********* 7 删除顺序表位子为i 的元素 *********");
printf("/n/t/t********* 8 显示顺序表 *********");
printf("/n/t/t********* 9 清除屏幕 *********");
printf("/n/t/t********* 10 退出循环 *********");
printf("/n/t/t*********************************************************");
printf("/n");
}
int main()
{
list l;
int a;
//printf("/n/n/n/n");
printf("/n/t/t*********************************************************");
printf("/n/t/t********* 1 构造空表 *********");
printf("/n/t/t********* 2 构造链表 *********");
printf("/n/t/t********* 3 求顺序表的长度 *********");
printf("/n/t/t********* 4 取表中第n个元素 *********");
printf("/n/t/t********* 5 查找顺序表中为x的元素 *********");
printf("/n/t/t********* 6 顺序表位置为i的地方插入x *********");
printf("/n/t/t********* 7 删除顺序表位子为i 的元素 *********");
printf("/n/t/t********* 8 显示顺序表 *********");
printf("/n/t/t********* 9 清除屏幕 *********");
printf("/n/t/t********* 10 退出循环 *********");
printf("/n/t/t*********************************************************");
printf("/n");
while(1)
{
printf("/n/t/t请输入你要的操作 a = ");
scanf("%d", &a);
if(a == 1)
{
empty(l);
}
else if(a == 2)
{
Initlist(l);
printf("/n/t/t显示插入后的顺序表:");
display(l);
}
else if(a == 3)
{
printf("/n/t/t%d", length(l));
}
else if(a == 4)
{
int b;
printf("/n/t/t请输入你要取的顺序表的位置:");
scanf("%d", &b);
printf("/n/t/t位置为b的元素为:%d", get(l,b));
}
else if(a == 5)
{
int x;
printf("/n/t/t查找顺序表中为x的元素x = ");
scanf("%d", &x);
printf("/n/t/t输出元素x的位置:%d", lacate(l, x));
}
else if(a == 6)
{
int i, x;
printf("/n/t/t输入你要插入的i = ");
scanf("%d", &i);
printf("/n/t/t输入你要插入的元素x = ");
scanf("%d", &x);
insnode(l, i, x);
printf("/n/t/t显示插入后的顺序表:");
display(l);
}
else if(a == 7)
{
int i;
printf("/n/t/t输入你要删除的位置i = ");
scanf("%d", &i);
delnode(l, i);
printf("/n/t/t显示s删除后的顺序表:");
display(l);
}
else if(a == 8)
{
printf("/n/t/t显示顺序表:");
display(l);
}
else if(a == 9)
{
system("cls");
fun();
//clrscr();
}
else if(a == 10)
{
break;
}
else
{
printf("/n/t/t对不起,没有你要选择的操作");
}
}
}