《数据结构》实训报告 下载本文

内容发布更新时间 : 2024/12/22 20:23:46星期一 下面是文章的全部内容请认真阅读。

实验一 线性表

1. 实验要求

1.1 掌握数据结构中线性表的基本概念。

1.2 熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度

及合并并运算在顺序存储结构上的实验。 1.3 熟练掌握链表的各种操作和应用。 2. 实验内容

2.1 编写一个函数,从一个给定的顺序表A中删除元素值在x到y之间的所

有元素,要求以较高效率来实现。

2.2 试写一个算法,在无头结点的动态单链表上实现线性表插入操作 2.3 设计一个统计选票的算法,输出每个候选人的得票结果。

3. 实验代码

2.1代码:

#include typedef int elemtype; #define maxsize 10

int del(int A[],int n,elemtype x,elemtype y) {

int i=0,k=0; while(i

{if(A[i]>=x&&A[i]<=y) k++; else A[i-k]=A[i]; i++; }

return(n-k); }

void main() {

int i,j;

int a[maxsize];

printf(\输入%d个数:\\n\ for(i=0;i

数据结构实验报告

j=del(a,maxsize,1,3);

printf(\输出删除后剩下的数:\\n\ for(i=0;i

printf(\ \}

2.2代码:

INSERT(L,i,b)。

void Insert(Linklist &L,int i,elemtype x) {

if(!L) { L=(Linklist)malloc(sizeof(Lnode)); (*L).data=x;(*L).next=NULL; } else { if(i==1) { s=(Linklist)malloc(sizeof(Lnode)); s->data=x;s->next=L;L=s; } else { p=L;j=1; while(p&&jnext;} if(p||j>i-1) return error; s=(Linklist)malloc(sizeof(Lnode)); s->data=x;s->next=p->next;p->next=s; } } }

2.3代码:

typedef int elemtype typedef struct linknode {

elemtype data;

struct linknode *next; }nodetype;

2

数据结构实验报告

nodetype *create() {

elemtype d;

nodetype h=NULL,*s,*t; int i=1;

printf(\建立单链表:\\n\ while(1) { printf(\输入第%d个结点数据域\ scanf(\ if(d==0)break; if(i==1) { h=(nodetype *)malloc(sizeof(nodetype)); h->data=d;h->next=NULL;t=h; } else { s=(nodetype *)malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s; } i++; }

return h; }

void sat(nodetype *h,int a[]) {

nodetype *p=h; while(p!=NULL) { a[p->data]++; p=p->next; } }

void main() {

int a[N+1],i; for(i=0;i

nodetype *head; head=create(); sat(head,a);

3

数据结构实验报告

}

printf(\候选人:\

for(i=1;i<=N;i++) printf(\printf(\得票数\\n\for(i=1;i<=N;i++) printf(\printf(\

4. 实验小结

线性表是最简单的、最常用的一种数据结构,是实现其他数据结构的基础。

实验二 栈与队列

1. 实验要求

1.1 了解栈和队列的特性,以便灵活运用。 1.2 熟练掌握栈和有关队列的各种操作和应用。

2. 实验内容

2.1 设一个算术表达式包括圆括号,方括号和花括号三种括号,编写一个算

法判断其中的括号是否匹配。

3. 实验代码

2.1代码:

#include #include #include #define NULL 0 typedef struct list {

char str;

struct list *next; }list;

void push(char,list *); int pop(char.list *); void deal(char *str); main(void) {

char str[20];

printf(\请输入一个算式:\\n\

4

数据结构实验报告

gets(str); deal(str);

printf(\正确!\getchar(); return 0;

}

void deal(char *str) {

list *L;

L=(list *)malloc(sizeof(list)); if(!L) {

printf(\错误!\ exit(-2); }

L->next=NULL; while(*str) {

if(*str=='('||*str=='['||*str=='{') push(*str,L); else if(*str==')'||*str==']'||*str=='}') if(pop(*str,L)) {puts(\错误,请检查!\ puts(\按回车键退出\ getchar();exit(-2); } str++; }

if(L->next) {

puts(\错误,请检查!\puts(\按任意键退出\getchar();exit(-2); } }

void push(char c,list *L) {

list *p;

p=(list *)malloc(sizeof(list)); if(!p) {

printf(\错误!\ exit(-2);

5