顺序线性表2

#ifndef SQLIST_H
#define SQLIST_H
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#define MAXSIZE 100//最大存储容量
typedef int ElemType;
typedef struct
{
 ElemType data[MAXSIZE];
 int length;
}SqList;
void InitList(SqList *q); //初始化
void InsertList(SqList *q,int i,ElemType e); //在第i个位置插入e
void DeleteList(SqList *q,int i); //删除第i个位置
int LocateElem(SqList *q,ElemType e); //在顺序表中查找元素e是否存在,不存在返回-1,否则返回所在的位置
void Change(SqList *q,int i,ElemType e);//在顺序表中修改第i处的元素
#endif //SQLIST_H

 

 

#include "顺序线性表2.h"
using namespace std;
void InitList(SqList *q)
{
 //将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
 memset(q->data,0,sizeof(ElemType) * MAXSIZE); //初始化顺序表的元素为0
 q->length = 0; //初始化顺序表的当前大小为0
}
void Change (SqList *q,int i,ElemType e)//xiugai
{
 if(i>0&&i<=q->length)
  q->data[i-1]=e;
 else
  printf("超出范围,元素返回失败\n");
}
void InsertList(SqList *q,int i,ElemType e) //在顺序表的第i个位置插入元素e
{
 if(i > MAXSIZE || i <= 0)
 {
  printf("超出范围,元素插入失败\n");
  return;
 }
 for(int j = q->length - 1;j >= i - 1;--j)//将i个位置与i之后的所有元素向后移一位(下标值从零开始i - 1)
  q->data[j + 1] = q->data[j];
 q->data[i - 1] = e; //将元素插入到顺序表中,下标值从零开始
 ++q->length; //增加当前顺序表的长度值
}
void DeleteList(SqList *q,int i) //将顺序表中第i个位置的元素删除,将删除的元素存入e
{
 if(i <= 0 && i > q->length)
 {
  printf("超出范围,元素删除失败\n");
  return;
 }
 for(int j = i - 1;j < q->length - 1;++j) //第i个位置之后的所有元素向前移动
  q->data[j] = q->data[j + 1];
 --q->length; //当前的顺序表长度减1
}
int LocateElem(SqList *q,ElemType e) //在顺序表中查找元素e,如果找到返回位置,否则返回-1
{
 for(int i = 0;i < q->length;++i)
 {
  if(q->data[i] == e)
   return i + 1; //下标从0开始,所以要加上1
 }
 return -1;
}
int main()
{
 SqList q;
 InitList(&q); //初始化顺序表
 int element;
 int i = 1; //首次需要插入一些元素
 printf("请输入要插入顺序表中的内容:(CTRL + Z)结束\n");
 while((scanf("%d",&element)) != EOF)
 {
  InsertList(&q,i,element);
  ++i;
 }
 fflush(stdin); //清空缓冲区,确保输入正确
 string ee="continue";
 while(ee=="continue")
 {
  int count;
  cout<<"请输入要进行的项目"<<endl;
  cout<<"1:增加"<<"2::删除"<<"3:查找"<<"4:修改"<<endl;
  cin>>count;
  switch(count)
  {
  case 1:
   int o;
   cout<<"请输入要插入的位置"<<endl;
   cin>>o;
   cout<<"请输入在第"<<o<<"处插入的元素"<<endl;
   scanf("%d",&element);
   InsertList(&q,o,element);
   printf("顺序表的内容为:\n");
   for(int j = 0;j < q.length;++j)
    printf("%d ",q.data[j]);
   cout<<endl;
   fflush(stdin);
   break;
  case 2:
   int i;
   printf("请输入要删除的元素的位置\n");
   cin>>i;
   DeleteList(&q,i);
   printf("顺序表的内容为:\n");
   for(int j = 0;j < q.length;++j)
    printf("%d ",q.data[j]);
   printf("\n");
   fflush(stdin);
   break;
  case 3:
   printf("请输入要在表中查找的元素:\n");
   scanf("%d",&element);
   if((i = LocateElem(&q,element)) == -1)
    printf("顺序表中不存在元素:%d\n",element);
   else
    printf("在顺序表的第%d个位置找到元素:%d\n",i,element);
    fflush(stdin);
    break;
  case 4:
   cout<<"请输入要修改元素的位置"<<endl;
   int l;
   cin>>l;
   cout<<"请输入要改成的值"<<endl;
   cin>>element;
   Change(&q,l,element);
   for(int i=0;i<q.length;i++)
    cout<<q.data[i]<<endl;
   fflush(stdin);
   break;
  }
  cout<<"输入continue继续操作,其他任意键退出程序"<<endl;
  cin>>ee;
 }
 return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值