데이터 구조 실험 1 - 순서표 - 각종 조작
3693 단어 교과서에서 실험하다
두 개의 순서표를 만들어서 두 개의 순서표의 합병과 확장, 그리고 한 개의 순서표의 검색, 삽입, 삭제, 정렬, 비우기, 삭제, 선구자와 후계 찾기 등을 실현한다.
(잘못이 있으면 계속 고친다)
프로그램의 완비성, 건장성, 가독성 등
이번 실험을 통해 내가 가장 많이 쓴 것은 프로그램이 아니라 프로그램 집행자에게 다음에 어떻게 선택해야 할지 알려주는 것 같아...(지난 학기 c 언어 과정 설계의 발걸음)
#include
#include
#include
#include
#include
#define MAXSIZE 100
#define INCREMENT 20
using namespace std;
typedef int status;
char str[10];
int n1,n2,rec;
typedef struct
{
int *elem;
int len;
int lise;
}sqlist;
sqlist sq1,sq2,sq3;
status initlist(sqlist &l)
{
l.elem=(int *)malloc(sizeof(sqlist)*MAXSIZE);
if(!l.elem)
return 0;
l.len=0;
l.lise=MAXSIZE;
return 1;
}
void getsq(int n,sqlist &l)//
{
for(int i=1;i<=n;++i)
{
scanf("%d",&l.elem[i]);
l.len++;
}
}
void destorylist(sqlist &l)//
{
if(l.elem)
delete []l.elem;
}
void clearlist(sqlist &l)//
{
l.len=0;
}
status listempty(sqlist &l)//
{
if(l.len==0)
{
return true;
}
return false;
}
status listlength(sqlist l)//
{
return l.len;
}
status getelem(sqlist l,int i,int &e)// i
{
if(i<=0||i>l.len)
{
return -1;
}
e=l.elem[i];
return 1;
}
status locatelem(sqlist l,int e)// e
{
for(int i=1;i<=l.len;++i)
{
if(l.elem[i]==e)
return i;
}
return -1;
}
status priorelem(sqlist l,int cur,int &pre)//
{
for(int i=1;i<=l.len;++i)
{
if(l.elem[i]==cur)
{
pre=l.elem[i-1];
return 1;
}
}
return -1;
}
status nextelem(sqlist l,int cur,int &next)//
{
for(int i=1;i<=l.len;++i)
{
if(l.elem[i]==cur)
{
next=l.elem[i+1];
return 1;
}
}
return -1;
}
void listinsert(sqlist &l,int i,int e)// i
{
for(int j=l.len;j>=i;j--)
{
l.elem[j+1]=l.elem[j];
}
l.elem[i]=e;
l.len++;
}
status listdelete(sqlist &l,int i,int &e)// i
{
if(i<=0||i>l.len)
return -1;
e=l.elem[i];
for(int j=i+1;j<=l.len;++j)
{
l.elem[j-1]=l.elem[j];
}
l.len--;
return 1;
}
void traverselist(sqlist l)//
{
for(int i=1;i<=l.len;++i)
{
if(i==1)
printf("%d",l.elem[i]);
else
printf(" %d",l.elem[i]);
}
printf("
");
}
void sortlist(sqlist &l)
{
for(int i=1;il.elem[j])
{
int tem=l.elem[i];
l.elem[i]=l.elem[j];
l.elem[j]=tem;
}
}
}
printf("
");
}
status kuorong(sqlist &l)
{
int c;
printf(" 1 0
");
scanf("%d",&c);
if(c==1)
{
int *newbase=(int *)realloc(l.elem,(l.lise+INCREMENT)*sizeof(sqlist));
if(!newbase)
{
printf("
");
return 0;
}
return 1;
}
else
return 0;
}
status mergelist(sqlist l1,sqlist l2,sqlist &l3)
{
if(l3.lise