数据结构上机实验

  • 格式: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;