数据结构实验
为了掌握数据结构这门课,我重修了这门课的实验,以求打好基本功。
实验一:链式存储结构
- 线性表的链表实验
- 随机生成10个100-999之间的三位整数放入链表。我用的是循环链表,跟单链表差别不大,只是最后一个元素最后指向的是头结点。
void Create(LinkNode *&L) //给定一个头结点,输出链表 { //逆序头插法 L = new LinkNode; L->data = 0; L->next = L; //头结点开始时指向自己 LinkNode* s; int x = 100; int y = 999; srand((unsigned)3); for(int i=0; i < 10; i++) { s = new LinkNode; s->data = (rand() %( y-x+1 ))+ x ;//这一句,只需要简单修改x,y的值就能直接修改上下限 s->next = L->next; L->next = s; } }
【10.27】完成单链表的创建,升序插入元素
#include"LinkList.h"
using namespace std;
void Insert(LinkNode *L,int num)
{
LinkNode* p = L->next,*pre=L,*Tem; //p指向第一个结点用来比较,pre指向p前面的点。Tem是新结点
Tem = new LinkNode;
Tem->data = num; //要把值给Tem结点,不然出问题
if(L->next == NULL) //当L没有结点时,插入
{
Tem->next = NULL;
L->next = Tem;
return;
}
while (p && (p->data < num)) //寻找合适的位置插入
{
pre = p;
p = p->next;
}
if(p == NULL) //没有找到合适位置,一直来到了链表最后
{
pre->next = Tem;
Tem->next = NULL;
}
else //找到了合适位置
{
Tem->next = p;
pre->next = Tem;
}
}
void Display(LinkNode *L)
{
LinkNode *o;
o = L->next;
while(o != NULL)
{
cout<<o->data<<" ";
o = o->next;
}
}
void Create(LinkNode *L)
{
L = new LinkNode;
L->data = 0;
L->next = NULL; //初始化L
int num=0;
cout<<"请输入要插入的元素,输入-1结束"<<endl;
cin>>num;
while(num != -1)
{
Insert(L,num);
L->data = L->data +1;
cin>>num;
}
cout<<"输入完成,列表元素如下:"<<endl;
Display(L);
}
#include"stdio.h" #include<iostream> #include<stdlib.h> struct LinkNode { LinkNode *next; int data; }; void Insert(LinkNode *L, int num); void Display(LinkNode *L); void Create(LinkNode *L);
1 #include"LinkList.h" 2 3 using namespace std; 4 5 6 int main() 7 { 8 LinkNode *L = NULL; 9 Create(L); 10 return 0; 11 }