数据结构上机实验
- 格式:doc
- 大小:302.50 KB
- 文档页数:66
目录
第1章绪论——上机实验题1解析
实验题1.1求素数
实验题1.2求一个正整数的各位数字之和
实验题1.3求一个字符串是否为回文
第2章线性表——上机实验题2解析
实验题2.1实现顺序表各种基本运算的算法
/*文件名:algo2-1.cpp*/
#include
#include
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int length;
} SqList;
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList *L)
{
free(L);
}
int ListEmpty(SqList *L)
{
return(L->length==0);
}
int ListLength(SqList *L)
{
return(L->length);
}
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;
for (i=0;ilength;i++)
printf("%c",L->elem[i]);
printf("\n");
}
int GetElem(SqList *L,int i,ElemType &e)
{
if (i<1 || i>L->length)
return 0;
e=L->elem[i-1];
return 1;
}
int LocateElem(SqList *L, ElemType e)
{
int i=0;
while (ilength && L->elem[i]!=e) i++;
if (i>=L->length)
return 0;
else
return i+1;
}
int ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (i<1 || i>L->length+1)
return 0;
i--; /*将顺序表位序转化为elem下标*/
for (j=L->length;j>i;j--) /*将elem[i]及后面元素后移一个位置*/
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++; /*顺序表长度增1*/
return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if (i<1 || i>L->length)
return 0;
i--; /*将顺序表位序转化为elem下标*/
e=L->elem[i];
for (j=i;jlength-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}
实验题2.2实现单链表各种基本运算的算法
*文件名:algo2-2.cpp*/
#include
#include
typedef char ElemType;
typedef struct LNode /*定义单链表结点类型*/
{
ElemType data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList)); /*创建头结点*/
L->next=NULL;
}
void DestroyList(LinkList *&L)
{
LinkList *p=L,*q=p->next;
while (q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
int ListEmpty(LinkList *L)
{
return(L->next==NULL);
}
int ListLength(LinkList *L)
{
LinkList *p=L;int i=0;
while (p->next!=NULL)
{
i++;
p=p->next;
}
return(i);
}
void DispList(LinkList *L)
{
LinkList *p=L->next;
while (p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int GetElem(LinkList *L,int i,ElemType &e)
{
int j=0;
LinkList *p=L;
while (j
{
j++;
p=p->next;
}
if (p==NULL)
return 0;
else
{
e=p->data;
return 1;
}
}
int LocateElem(LinkList *L,ElemType e)
{
LinkList *p=L->next;
int n=1;
while (p!=NULL && p->data!=e)
{
p=p->next;
n++;
}
if (p==NULL)
return(0);
else
return(n);
}
int ListInsert(LinkList *&L,int i,ElemType e)
{
int j=0;
LinkList *p=L,*s;
while (j
{
j++;
p=p->next;
}
if (p==NULL) /*未找到第i-1个结点*/
return 0;
else /*找到第i-1个结点*p*/
{
s=(LinkList *)malloc(sizeof(LinkList)); /*创建新结点*s*/
s->data=e;
s->next=p->next; /*将*s插 p->next=s;
return 1;
}
}
int ListDelete(LinkList *&L,int i,ElemType &e)
{
int j=0;
LinkList *p=L,*q;
while (j
{
j++;
p=p->next;
}
if (p==NULL) /*未找到第i-1个结点*/
return 0;
else /*找到第i-1个结点*p*/
{
q=p->next; /*q指向要删除的结点*/
p->next=q->next; /*从单链表中删除*q结点*/
free(q); /*释放*q结点*/
return 1;
}
}
第3章栈和队列——上机实验题3解析
实验题3.1实现顺序栈各种基本运算的算法
*文件名:algo3-1.cpp*/
#include
#include
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int top; /*栈指针*/
} SqStack;
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
void ClearStack(SqStack *&s)
{
free(s);
}
int StackLength(SqStack *s)
{
return(s->top+1);
}
int StackEmpty(SqStack *s)
{
return(s->top==-1);
}
int Push(SqStack *&s,ElemType e)
{
if (s->top==MaxSize-1)
return 0;
s->top++;
s->elem[s->top]=e;
return 1;
}
int Pop(SqStack *&s,ElemType &e)
{
if (s->top==-1)
return 0;
e=s->elem[s->top];
s->top--;
return 1;