广州大学学生实验报告
开课学院及实验室:计算机学院,电子信息楼416B 室
2014年 5 月8日
学院
计算机科学
与教育软件
学院
年级、专
业、班
计机126 姓名 黄俊能 学号 1206100184
实验课程名
称
实验项目名
称
数据结构
实验一 链式存储结构的基本操作
成绩
指导
老师
张艳玲
一、实验目的
掌握单链表,链式堆栈,链式队列的定义及基本操作。
二、使用仪器、器材
微机一台
操作系统:WinXP
编程软件:C++
三、实验内容及原理
1、线性表的链表实现:插入、删除、翻转:
用 带表头的链表存放输入的数据,每读入一个数,按升序顺序插入到链表中,链
表中允许两个结点有相同值。链表的头结点存放链表后面的结点个数,初始化时
就生成 头结点(初值为0)。链表翻转是把数据逆序(变成降序),注意,头结点
不动。翻转后要再翻转一次,恢复升序后才能插入新元素,否则会出错。
2、链式堆栈的实现:
先 定义堆栈的几个基本操作,再设计一主函数利用堆的操作完成以下功能:假设
一个算术表达式中可以包含三种括号:()[]{},且这三种括号可以按任意次序嵌
套使用(如:...[...{...}...[...]...]...(...))。编写判别给定表达式中所含
括号是否正确配对出现的算法,已知表达式已 存入数据元素为字符的单链表中。
3、链式队列的基本操作:
先 定义队列的几个基本操作,再设计一主函数利用队列的操作完成以下功能:键
盘输入的字符可以临时存入键盘的缓冲区中。为了充分利用缓冲区的空间,往往
将缓冲 区设计成链式循环队列的结构,并为循环队列结构的缓冲区设置一个队首
指针和一个队尾指针。每输入一个字符到缓冲区中,就将尾指针后移,链入缓冲
区的循环队 列之中;每输出一个字符号,就将队头指针前移,将它从缓冲队列中
删除。假设有两个进程同时存在于一个应用程序中,第一个进程连续在屏幕上显
示字符“X”, 第二个进程不断检查键盘上是否有输入,若有则读入用户键入的
字符,将其保存到键盘缓冲区中。
四、实验过程原始数据记录
1、线性表的链表实现:插入、删除、翻转
#include
#include
using namespace std;
typedef struct node
{
int data;
struct node *link;
}LNode, *LinkList;
LinkList insert(LinkList &list)
素
{
int item, n;
//新建一个链表或插入新元
LinkList p,q,w;
//list 第一个结点指针
cout << "你想插入多少个数据:n=";
cin >> n;
for (int i = 0; i> item;
//输入储存的数据
p = (LinkList)malloc(sizeof(LNode));
//申请一个新
的结点
p->data = item;
//将数据放入结点的数据域
p->link = NULL;
//链尾结点指针域置
空
if (list == NULL)
list = p;
{
}
else
{
if (itemdata)
//若 a 小于第一个
链接点
插在链表最前面
向被插入的新结点
{
}
else
{
p->link = list;
//将新的链接点
list = p;
//list 指
w = 0;
q = list;
//寻找插入位置
while (q != NULL && item >= q->data)
{
//r 指针总是指向当前链接点的直接前驱结点
}
//将新的链结点插在 q 指示的链结点后面
w = q;
q = q->link;
p->link = q;
w->link = p;
}
}
}
return (list);
}
LinkList deleteline(LinkList &list, int a)
item 的所有连接点
//删除链表中数据域值为
{
LinkList p, q = list;
p = list->link;
while (p != NULL)
{
if (p->data == a)
{
q->link = p->link;
free(p);
p = q->link;
q = p;
p = p->link;
}
else
{
}
}
if (list->data == a)
{
}
q = list;
list = list->link;
free(q);
return(list);
}
LinkList overturnline(LinkList &list)
//链表翻转
{
LinkList p, q = NULL, r;
p = list;
while (p != NULL)
{
r = q;
q = p;
p = p->link;
q->link = r;
}
list = q;
return (list);
}
int line(LinkList &q)
//将数据域值链表排列展示
{
}
int n = 0;
cout << "数据域值从小到大排列的有序链表 :";
while (q != NULL)
{
}
n++;
cout << q->data << ' ';
q = q->link;
cout << "\n 头结点后面的结点数 n=" << n;
return (n);
void main()
//主函数