顺序表

来源:互联网 发布:淘宝买家留言在哪里 编辑:程序博客网 时间:2024/04/30 12:47

 

#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对不起,没有你要选择的操作");
  }

 }
}

 

原创粉丝点击