数据结构和算法实验指导书 下载本文

WORD格式可编辑 for(j=0;jlast;j++) {

if(j==i-1) //匹配 {

for(k=l->last;k>j;k--) //将所选插入位置之后原素后移 {

l->data[k]=l->data[k-1]; }

l->data[j]=x; //把x赋值给所选位置 break; } } }

l->last=l->last+1; //数值长度加一 return 1; }

return 0; //无效位置 }

main() {

list b; int x,i; b.last=10;

for(i=0;i

printf(\请输入x的值:\ scanf(\

if(insert(&b,66,x)!=0) {

for(i=0;i

printf(\ } else

printf(\}

//时间复杂度T(n)=O(n); 4、

专业知识分享

WORD格式可编辑 #include #define MAXSIZE 20

typedef struct{

int data[MAXSIZE]; int last; }list;

/*编写函数,实现在顺序表中将所有偶数排在所有奇数前面,编写主函数验证此算法,并分析算法的时间复杂度 */

void fun(list *l)

{ //这个代码有点晦涩,但空间时间复杂度是鸡儿低

int i,ou=0,temp; //i计数,ou代表偶数个数 for(i=0;ilast;i++) //循环 {

if(l->data[i]%2==0) //判断是不是偶数,如果是偶数的话和当前第ou个位置的原素交换位置

{

temp=l->data[ou];

l->data[ou]=l->data[i]; l->data[i]=temp;

ou+=1; //偶数个数加一 } }

printf(\当前数组中偶数有%d个,奇数有%d个:\\n\}

main() {

list b;

int i=0,m=0; b.last=10;

printf(\请输入数组元素的值:\\n\ for(i=0;i

printf(\

scanf(\ }

fun(&b);

for(i=0;i

专业知识分享

WORD格式可编辑

//时间复杂度为T(n)=O(n); 四、实验报告要求 1、撰写实验报告;

2、对实验中出现的问题和结果进行总结。

专业知识分享

WORD格式可编辑 实验二 链表的实现和应用

一、实验目的

1、掌握链表的定义;

2、掌握链表的基本操作,如查找、插入、删除、排序等。 二、实验内容 1、单链表的创建 2、单链表的查找 3、单链表的排序 4、单链表的删除

5、链表的应用--约瑟夫环问题 三、实验提示

1、//创建单链表,要求:结点个数为n个,每个节点数据域的值必须小于m。编辑主函数验证之。

#include #include typedef struct aa { int data;

struct aa *next; } NODE;

NODE *Creatlink(int n, int m) {

int i;

NODE *tou,*p; //tou 头结点

tou=(NODE*)malloc(sizeof(NODE)); //创建并初始化头结点 tou->next=NULL;

tou->data=n;

printf(\请输入%d个小鱼%d的数,中间用空格隔开:\\n\ for(i=0;i

p=(NODE*)malloc(sizeof(NODE)); scanf(\ if(p->data>=m) {

printf(\输入的第%d个数据大于%d,GG\\n\

exit(0); //程序强制中断,好像是在头文件stdlib.h里

}

p->next=tou->next; tou->next=p; }

return tou; }

专业知识分享

WORD格式可编辑 outlink(NODE *h) { NODE *p; p=h->next;

printf(\ while(p)

{ printf(\ p=p->next; }

printf(\}

main()

{ NODE *head;

head=Creatlink(8,22); outlink(head); }

2、//查找值为ch的节点在链表中是否出现,如果存在,返回在链表中位序,如果不存在返回0

#include #include #define N 8 typedef struct list { int data;

struct list *next; } SLIST;

SLIST *creatlist(char *); void outlist(SLIST *);

int fun( SLIST *h, char ch) {

int i; SLIST *p;

p=h->next; //p赋值为寿元节点 for(i=0;i

if(p->data==ch) return i+1;

专业知识分享