双链表的实现
来源:互联网 发布:python包怎么安装 编辑:程序博客网 时间:2024/06/06 00:38
《数据结构》实验二:
线性表综合实验
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
3)用双链表实现。
4)用静态链表实现。
5)用间接寻址实现。
双链表的实现
#includeusing namespace std;const int M=100;//双链表的存储struct DulNode{int data;DulNode *prior,*next;};class LinkList{public:LinkList();LinkList(int a[],int n);~LinkList();int Length();int Get(int i);int Locate(int x);void Insert(int i,int x);int Delete(int i);void PrintList();private:DulNode *first;};//遍历操作void LinkList::PrintList(){DulNode *p;p=first->next; //使其指向第一个元素while(p!=NULL){cout< data<<" ";p=p->next; //指针后移}cout< next; //使其指向第一个元素while(p!=NULL){p=p->next; //指针后移count++;}return count;}//按位查找int LinkList::Get(int i){DulNode *p;int count=1;p=first->next;while(p!=NULL&&countnext;count++;}if(p==NULL) throw"位置";else return p->data;}//按值查找int LinkList::Locate(int x){DulNode *p;int count=1;p=first->next;while(p!=NULL){if(p->data==x) return count;p=p->next;count++;}return 0;}//插入操作void LinkList::Insert(int i,int x){DulNode *p,*s;int count=0;p=first; //p指向头节点while(p!=NULL&&count next;count++;}if(p==NULL) throw"位置";else{s=new DulNode;s->data=x;s->prior=p;s->next=p->next;p->next->prior=s;p->next=s;}}//无参构造函数LinkList::LinkList(){first=new DulNode; //头结点first->next=NULL;}//有参构造函数LinkList::LinkList(int a[],int n){DulNode *s,*r;first=new DulNode;r=first;for(int i=0;i data=a[i];s->prior=r;r->next=s;r=s;}r->next=NULL;}//删除操作int LinkList::Delete(int i){DulNode *p;int count=0;p=first;int x;while(p!=NULL&&countnext;count++;}if(p==NULL) //结点p不存在或其后继结点不存在 throw"位置";else{x=p->data;(p->prior)->next=p->next;if(p->next!=NULL) (p->next)->prior=p->prior;delete p;return x;}}//析构函数LinkList::~LinkList(){DulNode *q;while(first!=NULL){ q=first;first=first->next;delete q;}}int main(){int x,n,loc,len,tab; cout<<"\t\t\t\t\t录入学生成绩信息"< >n;for(j=0;j >d[j];} LinkList List(d,n); while (1) {cout<<"\t\t\t\t\t********** 双链表的实现 **********"< >tab; switch(tab) { case 1: {cout<<"\t\t\t\t\t1.输出学生成绩 :"; List.PrintList();cout< >loc; x=List.Get(loc);cout <<"\t\t\t\t\t要查找的成绩是:"< >x; loc=List.Locate(x); cout<<"\t\t\t\t\t输入要查找成绩的位置是:"< >loc; cout<<"\t\t\t\t\t输入要插入的成绩:"; cin>>x; List.Insert(loc,x);cout< >loc;x=List.Delete(loc);cout<
执行结果截图:
1)录入并输出学生成绩
2)输出表长
3)按位查找
4)按值查找
5)插入操作
6)插入成功后输出成绩
7)删除操作
8)插入成功后输出成绩
阅读全文
0 0
- 循环双链表的实现
- JAVA双链表的实现
- 双链表的实现
- 双链表的实现
- Java双链表的实现
- 实现双链表的排序
- 双链表的实现
- 双链表的简单实现
- c 双链表的实现
- 双链表的实现
- 双链表的简单实现
- 双链表的实现
- 双链表的实现
- 双链表的实现
- 双链表的简单实现
- 循环双链表的实现
- DS 双链表的实现
- 双链表的简单实现
- 数据结构:B树&B+树&B*树
- 错排相关
- 高级UI特效之仿3D翻转切换效果
- HYSBZ3083-遥远的国度
- hihocoder#1589 : 回文子串的数量(manacher)
- 双链表的实现
- 深度学习模型压缩加速
- GitHub入门
- 闭包
- 集合操作、系统自带函数
- Linux的文件处理命令
- vs2010编译7z项目
- 自定义模板类(循环队列)
- XTU 1265 Page