这里也是个问题
刚刚修改过的
但是插入和删除功能还是有问题..
我无语了
#include"stdio.h"
#include"malloc.h"
#define maxsize 100
typedef char Sqltype;
typedef struct
{
Sqltype Sql[maxsize];
int leng;
}sqlist;
void creatList(sqlist *l)//l=*L
{
int i;
short int n;
printf("输入元素个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个元素值:",i+1);
scanf("%s",l->Sql+i);
}
l->leng=n-1;
printf("\n");
}
//在第i个位置前插入x
insert(sqlist *l,Sqltype i,int x)
{
int j;
if(l->leng==maxsize-1)
{
printf("线性表已满");
return 0;
}
else if((i<0)||i>(l->leng+1))
{
printf("你的输入超出范围了!\n");
return 0;
}
else
{
for(j=l->leng;j>=i;j--)
{
l->Sql[i]=l->Sql[i-1];
l->Sql[i-1]=x;
l->leng++;
}
printf("插入成功\n");
return 1;
}
}
int del(sqlist *l,int x)
{
if(x<1||(x>l->leng))
{
printf("错误,该值不存在!请重新输入!\n");
return 0;
}
else
for(;x<l->leng;x++)
{
l->Sql[x]=l->Sql[x+1];
l->leng--;
}
printf("删除成功!\n");
return 1;
}
/* Location(sqlist l, Sqltype i)
{
int x=0;
while(x<(l->leng) && (l->Sql[x])!=i)
x++;
if(x>=l->leng)
{
printf("超出范围!");
return 0;
}
else
return x;
}*/
void prinout(sqlist *l)
{
int i;
i=0;
if((i>l->leng)||(l->leng<0))
{
printf("无此顺序表!\n");
}
else
for(i=0;i<=l->leng;i++)
{
printf("第%d个元素是:%c",i+1,l->Sql[i]);
printf("\n");
}
}
void main()
{
int i,choise;
int s;
sqlist *L;
L=(sqlist*)malloc(sizeof(sqlist));
do
{
printf("*******************************\n");
printf("** 1.创建顺序表 ****\n");
printf("** 2.插入顺序表 ****\n");
printf("** 3.删除顺序表 ****\n");
printf("** 4.查找顺序表中的一个元素****\n");
printf("** 5.输出顺序表 ****\n");
printf("** 6.退出 ****\n");
printf("****请输入你的选择*************\n");
scanf("%d",&choise);
switch(choise)
{
case 1:
creatList(L);
break;
case 2:
printf("请输入要插入数值:");
scanf("%s",&s);
printf("请输入要插入的位置:");
scanf("%d",&i);
insert(L,i,s);
break;
case 3:
printf("输入你要删除元素的位置:");
scanf("%d",&i);
del(L,i);
break;
/* case 4:
printf("请输入你要查找的位置:");
scanf("%d",i);
Location(L,i);
break;*/
case 5:
prinout(L);
break;
default:
if(choise!=6)
{
printf("非法输入,请重新选择\n");
}
else break;
}
}while(choise!=6);
}
给你一个C++的源码:
// SeqList.h: interface for the SeqList class.
//
//////////////////////////////////////////////////////////////////////
//SeqList.h
#ifndef SeqList_H
#define SeqList_H
const int MaxSize=100;
template <class T>
class SeqList
{ public:
SeqList (){length=0;} //无参构造函数,创建一个空表
SeqList(T a[],int n); //有参构造函数
void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素
T Delete(int i); //删除线性表的第i个元素
int Locate(T x); //按值查找,求线性表中值为x的元素序号
void PrintList ();
private:
T data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
#endif
// SeqList.cpp: implementation of the SeqList class.
//
//////////////////////////////////////////////////////////////////////
#include "SeqList.h"
template<class T>
SeqList<T>::SeqList(T a[],int n)
{
if(n>MaxSize) throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
template <class T>
void SeqList<T>::Insert(int i,T x)
{
if(length>=MaxSize) throw"上溢";
if(i<1||i>length+1) throw"位置异常";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
template<class T>
T SeqList<T>::Delete(int i)
{
if(length==0) throw"下溢";
if(i<1||i>length) throw"位置异常";
T x=data[i-1];
for(int j=0;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
template<class T>
int SeqList<T>::Locate(T x)
{
for(int i=0;i<length;i++)
if(data[i]==x) return i+1;
return 0;
}
template<class T>
void SeqList<T>::PrintList()
{
for(int i=0;i<length;i++)
cout<<data[i]<<endl;
}
//main.cpp
#include<iostream.h>
#include"SeqList.cpp"
void main()
{
int r[]={1,2,3,4,5};
SeqList<int>a(r,5);
cout<<"执行插入操作前数据为:"<<endl;
a.PrintList();
try
{
a.Insert(2,3);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"执行插入操作后数据为:"<<endl;
a.PrintList();
cout<<"值为3的元素位置为:";
cout<<a.Locate(3)<<endl;
cout<<"执行删除第一个元素操作,删除前数据为:"<<endl;
a.PrintList();
try
{
a.Delete(1);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"删除后数据为:"<<endl;
a.PrintList();
}