数据结构验证作业
1数据结构数据结构实验报告一实验报告一一、上机实验的问题和要求:一、上机实验的问题和要求:单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的 查找、插入与删除。具体实现要求: 1.从键盘输入 20 个整数,产生不带表头的单链表,并输入结点值。 2.从键盘输入 1 个整数,在单链表中查找该结点的位置。若找到,则显示“找到了” ;否 则,则显示“找不到” 。 3.从键盘输入 2 个整数,一个表示欲插入的位置 i,另一个表示欲插入的数值 x,将 x 插 入在对应位置上,输出单链表所有结点值,观察输出结果。 4.从键盘输入 1 个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结 果。 5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所 有结点值,观察输出结果。 6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。 7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。 8.()将单链表分解成两个单链表 A 和 B,使 A 链表中含有原链表中序号为奇数的元 素,而 B 链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出 单链表 A 和单链表 B 的所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述:二、程序设计的基本思想,原理和算法描述:1、基本操作函数 link * get(link *l, int i); /创建链表 link * ins (link *l, int a,int i)/在链表内插入值 link * find(link *l, int a);/在链表内查找值 link * del(link *l, int i);/在链表内删除值 link * delrepeat( link *l);/在链表内删除重复值 link * deleven(link *l);/删除链表内偶数值 link * rotate(link *l);/形成循环链表 void divide(link *l);/分解成两个链表 cout using namespace std;typedef struct node int data; struct node *next; link;void print1(link *l);link * get(link *l, int i) link *p; int j=0; p=l; while(jnext!=NULL) p=p->next;j+; if(j=i) return p; else return NULL; link * ins (link *l, int a,int i) link *p,*s; p=get(l,i-1); if(p=NULL) coutdata=a; s->next=p->next; p->next=s; return l;3link * find(link *l, int a) link *p; int i=0; int j=0; p=l;while(p!=NULL) i+; if(p->data!=a) p=p->next; else coutnext; if(j!=1) coutnext; p->next=s->next; free(s); return l; link * delrepeat( link *l) / 删除相同元素并释放内存 link *s, *r, *t; 4if ( l-> next = NULL ) return l; s = l-> next; while ( s-> next ) t = s; r = s-> next; while ( t-> next ) if ( s-> data = r-> data ) t-> next = r-> next; free(r); r = t-> next; else t = t-> next; r = t-> next; s = s-> next; if ( !s ) return l; return l; link * deleven(link *l) link *q=l; link *p=l->next;while(p) if(p->data%2=0) link *r=p; q->next=p->next; p=p->next; free(r); else p=p->next; q=q->next;5 return l; link * rotate(link *l) link * p=l; while(p->next)p=p->next; p->next=l;link * t=l->next; while(t!=l) t=t->next; coutnext=NULL; link *Lb=b;int i=1;link * La=l; link * p=l->next; while(p) if(i+%2=0) La->next=p->next; p->next=NULL; Lb->next=p; Lb=Lb->next; p=La->next; else p=p->next; La=La->next;6 coutnext; if(l!=NULL) do coutdatanext; while(p!=NULL); coutnext; if(l!=NULL) do coutdatanext; while(p!=NULL); cout>k; if(k=1) cout>a; cout>i; p=ins(l,a,i); q=print(l); else if(k=2) cout>a; p=find(l,a); q=print(l); else if(k=3) cout>i; p=del(l,i); q=print(l); else if(k=4) coutnext=NULL; r=l; for(i=0;i>chi; p=(link *)malloc(sizeof(link); p->data=chi;p->next=NULL; r->next=p;r=r->next; q=print(l); return 0;