《P3上海第二工业大学暑期数据结构实训参考.docx》由会员分享,可在线阅读,更多相关《P3上海第二工业大学暑期数据结构实训参考.docx(11页珍藏版)》请在三一办公上搜索。
1、P3上海第二工业大学暑期数据结构实训参考#include <iostream.h>#include <iomanip.h>#include <conio.h>#include <stdio.h>#include <process.h>#include <string.h>#include <math.h>#include <stdlib.h>/定义结点类型struct Nodeint data;Node *next;Node Head; /头结点Node *DLList; /头指针void init(Node *DLList);v
2、oid display(Node *DLList);void insert(Node *DLList);void search(Node *DLList);void del(Node *DLList);void choiceSort(Node *DLList);void mainchar choice;DLList=&Head; /使头指针指向头结点Head.next=NULL; while (1)system(cls);cout << nnnn;cout << tt 动态线性表操作 n;cout << tt=;cout << nn;cout << tt
3、 1:初始化 n;cout << tt 2:显示 n;cout << tt 3:单个插入 n;cout << tt 4:查找 n;cout << tt 5:删除 n;cout << tt 6:选择排序 n;cout << tt 0:退出 n;cout << n;cout << tt请选择: << flush;choice = getch;system(cls);switch(choice)case 1:init(DLList);break;case 2:display(DLList);break;case 3:insert
4、(DLList);break;case 4:search(DLList);break;case 5:del(DLList);break;case 0:exit(0);case 6:choiceSort(DLList);break;/公用的等待函数void waitcout << nn请按任意键继续 << flush;getch;/屏幕提示后,从键盘输入线性表长度和随机数种子,生成以DLList为头指针的指定长度的线性表void init(Node *DLList)int length;Node *p,*q;while (1)cout << 输入元素个数: <<
5、flush;cin >> length;if (length >= 0 & length <= 10000)break;cout << endl;int i;while (1)cout << 输入随机数种子: << flush;cin >> i;if (i >= 0 & i <= 32767)break;cout << endl;/从线性表中删除并释放原有的结点,使其成为空表p=DLList;while (p->next!=NULL)q=p->next;p->next=q->next;free(q);srand(i
6、); /指定随机数种子,相同的种子将产生相同的数据序列rand; /向线性表插入length个新结点for (int j=1;j<=length;j+) p=new Node;p->next=DLList->next;DLList->next=p;p->data=rand % 10000;/在屏幕上依次显示以DLList为头指针的线性表中的全部元素和元素个数/格式应便于观察/如果需要指定输出的宽度,可以使用 cout << setw(W) << X ,其中 X 是输出的数值,W 是占据的列数void display(Node *DLList)Node *x=
7、DLList->next;int j=0;while(x)cout<< <<x->data;x=x->next;if(j%10=9)cout<<endl;j+;cout<<一共有<<j<<个元素<<endl;wait;/屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾void insert(Node *DLList)int j;cout<<插入的值是:<<endl;cin>>j;Node *x=DLList->next,*y;while(x->next)
8、x=x->next;y=(Node *)malloc(sizeof(Node);y->data=j;y->next=x->next;x->next=y; /屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中搜索这个元素void search(Node *DLList)int j;Node *a=DLList->next;cout<<需要搜索的值是:<<endl;cin>>j;while(a&a->data!=j)a=a->next;if(a)cout<<U get it:<<a<<endl;els
9、ecout<<failed<<endl;/屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中删除这个元素/屏幕显示删除成功与否的信息void del(Node *DLList)int j;Node *a=DLList;cout<<需要删除的值是:<<endl;cin>>j;while(a->next & a->next->data!=j)a=a->next;if(a->next)a->next=a->next->next;cout<<all right<<endl;elsecout<&
10、ltsorry,failed<<endl;/*参照选择排序法的思路对以DLList为头指针的线性表排序参照冒泡排序法的思路对以DLList为头指针的线性表排序用修改指针的方法使已排序的线性表反向排序*/ 选择法排序void choiceSort(Node *DLList)Node *p,*q;p=DLList;p=p->next;q=(Node*)malloc(sizeof(Node);q->next=p;DLList->next=NULL;Node *max,*t;while(q->next!=NULL)max=q;p=q;while(p->next!=NULL)if(p->next->data>max->next->data) max=p;p=p->next;t=max->next;max->next=max->next->next;t->next=DLList->next;DLList->next=t;