华南农业大学数据结构java版实验二

华南农业大学数据结构java版实验二
华南农业大学数据结构java版实验二

实验报告二线性表

华南农业大学信息(软件)学院

《数据结构(JA V A)》综合性、设计性实验成绩单

开设时间:2017学年第二学期

一,实验目的:

(1)理解线性表的逻辑结构、两种存储结构和数据操作,熟练运用JAVA语言实现线性表的基本操作,分析各种操作算法特点和时间复杂度。

(2)掌握单链表的遍历、插入和删除等操作算法,实现多项式相加。

二,实验内容:

1、设计一个有序顺序表(元素已排序,递增或递减),实现插入、删除等操作,元素插入位置由其值决定。

实现:

(1)升序排序顺序表类名为:SortedSeqList,存成SortedSeqList.java文件;

(2)另外编写SortedSeqList_ex.java文件来演示调用排序顺序表

publicclass SortedSeqList {

privateint MAX_SIZE = 10;

privateint[] ary = newint[MAX_SIZE];

privateint length = 0;

public SortedSeqList(int[] array) {

if (array == null || array.length == 0) {

this.length = 0;

} else {

ary = array;

length = array.length;

}

}

publicvoid clear() {

length = 0;

}

publicboolean isEmpty() {

return length == 0;

}

publicvoid delete(int index) throws Exception {

if (length == 0) {

thrownew Exception("No elment to delete");

}

int newAry[] = newint[ary.length - 1];

for (int i = 0, j = 0; i

if (i == index) {

continue;

} else {

newAry[j++] = ary[i];

}

}

ary = newAry;

length--;

}

publicint insert(int value) throws Exception {

if (length == MAX_SIZE) {

thrownew Exception("List is full, can't insert more");

}

int[] newAry = newint[length + 1];

int i = 0, j = 0;

for (; i

if (ary[i] >= value) {

newAry[j] = value;

break;

} else {

newAry[j] = ary[i];

}

}

while (i

newAry[++j] = ary[i];

i++;

}

ary = newAry;

length++;

return value;

}

publicvoid display() {

System.out.println("\nList now is: ");

for (int i = 0; i

System.out.print(ary[i] + "\t");

}

}

}

(2)SortedSeqList_ex.java文件来演示调用排序顺序表

public class SortedSeqList_ex {

public static void main(String[] args) throws Exception {

int[] ary = {1, 2, 3, 5, 7};

SortedSeqList list = new SortedSeqList(ary);

list.display();

list.insert(4);

list.display();

list.delete(2);

list.display();

}

}

(3)实验结果

2、在SinglyLinkedList类中增加下列成员方法。

public SinglyLinkedList(E[] element)//由指定数组中的多个对象构造单链表

public SinglyLinkedList(SinglyLinkedList list)//以单链表list构造新的单链表,复制单链表

public void concat(SinglyLinkedList list)//将指定单链表list链接在当前单链表之后

public Node search(E element)//若查找到指定,则返回结点,否则返回null public boolean contain (E element)//以查找结果判断单链表是否包含指定对象public boolean remove (E element)//移去首次出现的指定对象

public boolean replace (Object obj, E element)//将单链表中的obj对象替换为对象element

public boolean equals(Object obj)//比较两条单链表是否相等

(1)实现代码:

package Q2;

publicclass Node {

public T data;

public Nodenext;

public Node(T data,Node next){

this.data=data;

this.next=next;

}

public Node(){

this(null,null);

}

}

package Q2;

publicclass SinglyLinkedList{

Nodehead;

public SinglyLinkedList(E[] element){//由指定数组中的多个对象构造单链表head = new Node();

Node List = head;

for(int i=0;i

List.next=new Node(element[i],null);

List=List.next ;

}

}

public SinglyLinkedList(SinglyLinkedList list){//以单链表list构造新的单链表,复制单链表

head=new Node();

Nodelist_new = head;

Node p=list.head;

if(p.data==null){

p=p.next;

list_new=list_new.next;

}

while(p!=null){

list_new.next =new Node(p.data,null);

list_new=list_new.next;

p=p.next ;

}

}

publicvoid concat(SinglyLinkedList list){//将指定单链表list链接在当前单链表之后

Node rear = null;

Node p = head;

Node q=list.head.next ;

if(p.data==null)

p=p.next ;

while(p!=null){

rear=p;

p=p.next ;

}

if(q==null){

q=q.next ;

}

rear.next=q;

}

public Node search(E element){//若查找到指定,则返回结点,否则返回null Node p=this.head;

Node temp=null;

if(p==null)

p=p.next ;

while(p.next!=null){

if(p.data==element){

temp=p;

}

p=p.next ;

}

return temp;

}

publicboolean contain (E element){//以查找结果判断单链表是否包含指定对象boolean flag=false;

Node p=this.head;

Nodetemp=null;

if(p==null)

p=p.next ;

while(p!=null){

if(p.data==element){

flag=true;

}

p=p.next ;

}

return flag;

}

publicboolean remove (E element){//移去首次出现的指定对象

Node p=this.head;

Node temp=null;

Node front=head;

boolean flag=false;

if(p==null)

p=p.next ;

while(p!=null&& temp==null){

if(p.data==element){

temp=p;

flag=true;

break;

}

p=p.next ;

front=front.next ;

}

front=p.next ;

return flag;

}

publicboolean replace (Object obj, E element){//将单链表中的obj对象替换为对象element

boolean flag=false;

if (obj!=null&& element!=null){

Node p=this.head;

while (p!=null){

if (obj.equals(p.data)){

p.data = element;

flag = true;

}

p = p.next;

}

}

return flag;

}

publicboolean equals(Object obj){//比较两条单链表是否相等

boolean flag=true;

SinglyLinkedList x=(SinglyLinkedList) obj;

Node t=x.head.next;

Node s=this.head.next;

while(t!=null&&s!=null){

if(t.data!=s.data){

flag=false;

break;

}

t=t.next;

s=s.next;

}

return flag;

}

}

package Q2;

import java.util.*;

publicclass Test {

static Integer[] x={3,5,8,11};

static Integer[] x1={3,5,8,11};

static Integer[] x2={2,6,8,9,11,15,20};

static SinglyLinkedListList1=new SinglyLinkedList(x);

static SinglyLinkedListList2=new SinglyLinkedList(x1);

static SinglyLinkedListList3=new SinglyLinkedList(x2);

publicstaticvoid disList(SinglyLinkedList List){

for(Node temp=List.head.next;temp!=null;temp=temp.next){

System.out.printf("%-5d",temp.data);

}

System.out.println();

}

publicstaticvoid concat(){

List1.concat(List3);

}

publicstaticvoid Find(){

System.out.println("请输入需要查找的数:");

Scanner scan=new Scanner(System.in);

Integer element=scan.nextInt();

Node t=List1.search(element);

if(t!=null)

System.out.println(t.data);

else

System.out.println("List1中找不到指定的数。");

}

publicstaticvoid Contain(){

System.out.println("请输入所需包含的数:");

Scanner scan=new Scanner(System.in);

Integer element=scan.nextInt();

if(List3.contain(element))

System.out.printf("List3包含指定的数%-5d\n",element);

else

System.out.printf("List3不包含指定的数%-5d\n",element);

}

publicstaticvoid remove(){

System.out.println("请输入指定移除的数:");

Scanner scan=new Scanner(System.in);

Integer element=scan.nextInt();

if(List3.remove(element))

System.out.printf("%-5d已在List3中移除\n",element);

else System.out.printf("%-5d无法在List3中找到,无法移除\n",element); }

publicstaticvoid replace(){

System.out.println("请输入所需交换的两个数:");

Scanner scan=new Scanner(System.in);

Integer obj=scan.nextInt();

Integer element=scan.nextInt();

if(List3.replace(obj, element))

System.out.printf("%-5d与%-5d两个数成功交换\n",obj,element);

else System.out.println("无法改动");

}

publicstaticvoid equals(){

if(List1.equals(List2))

System.out.println("List1与List2两个单链表相等");

else System.out.println("List1与List2两个单链表不相等");

if(List1.equals(List3))

System.out.println("List1与List3两个单链表相等");

else System.out.println("List1与List3两个单链表不相等");

}

publicstaticvoid main(String[] args) {

disList(List1);

disList(List2);

disList(List3);

concat();

disList(List1);

Find();

Contain();

remove();

replace();

equals();

}

}

(2)实验结果

3,先写出LList接口并写上要实现的方法的方法头,再CircSinglyLinkedList类中继承该接口并实现其方法。

(1)写出LList接口;

publicinterface LList {

boolean isEmpty();

int size();

T get(int i);

void set(int i,T x);

String toString();

T remove(int i);

void clear();

int search(T key);

boolean contains(T key);

T insertDifferent(T x);

T remove(T key);

boolean equals(Object obj);

}

(2)结点类

package Lab2;

publicclass Node {

public T data;

public Nodenext;

public Node(T data, Node next){

this.data = data;

this.next = next;

}

public Node(){

this(null, null);

}

public String toString(){

returnthis.data.toString();

}

}

(3)CircSinglyLinkedList类

publicclass CircSinglyLinkedListimplements LList{ public Nodehead;

@Override

publicboolean isEmpty() {

// TODO Auto-generated method stub

returnthis.head.next==null;

}

@Override

publicint size() {

// TODO Auto-generated method stub

Node temp = this.head.next;

int count = 0;

while(temp!=null){

count++;

temp = temp.next;

}

return count;

}

@Override

public T get(int i) {

// TODO Auto-generated method stub

Node temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

return temp.data;

}

}

}

@Override

publicvoid set(int i, T x) {

// TODO Auto-generated method stub

Node temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

temp.data = x;

}

}

}

@Override

public T remove(int i) {

// TODO Auto-generated method stub

int count=0;

Node temp = this.head;

Node p;

for(; ; temp=temp.next){

if(count+1==i){

p = temp.next;

temp.next = temp.next.next;

return(T) p;

}

count++;

}

}

@Override

publicvoid clear() {

// TODO Auto-generated method stub

this.head.next = null;

}

@Override

publicint search(Object key) {

// TODO Auto-generated method stub

int i=0;

Node temp = this.head.next;

for(; temp.next!=null; temp=temp.next){ i+=1;

if(temp.data.equals(key)){

break;

}

}

return i;

}

@Override

publicboolean contains(Object key) {

// TODO Auto-generated method stub

Node temp = this.head.next;

for(; temp.next!=null; temp=temp.next){ if(temp.data.equals(key)){

returntrue;

}

}

returnfalse;

}

@Override

public NodeinsertDifferent(T x) {

// TODO Auto-generated method stub

Node front=this.head, p=front.next; while (p!=null&& !p.data.equals(x))

{

front = p;

p = p.next;

}

if (p!=null)

{

System.out.println("x="+x+",元素重复,未插入。");

return p;

}

return front.next = new Node(x,null);

}

@Override

public T remove(Object key) {

// TODO Auto-generated method stub

Node temp = this.head;

Node p;

for(; ; temp=temp.next){

if(temp.next.data.equals(key)){

p = temp.next;

temp.next = temp.next.next;

return(T)p;

}

}

}

}

4,先写出LList接口并写上要实现的方法的方法头,再DoublyLinkedList类中继承该接口并实现其方法。

(1)双结点类

publicclass DoubleNode {

public T data;

public DoubleNodeprev,next;

public DoubleNode(T data, DoubleNodeprev, DoubleNode next){

this.data = data;

this.prev = prev;

this.next = next;

}

public DoubleNode(T data){

this(data, null, null);

}

public DoubleNode(){

this(null, null, null);

}

public String toString(){

returnthis.data.toString();

}

}

(2)LList接口

publicinterface LList {

boolean isEmpty();

int size();

T get(int i);

void set(int i,T x);

String toString();

T remove(int i);

void clear();

int search(T key);

boolean contains(T key);

T insertDifferent(T x);

T remove(T key);

boolean equals(Object obj);

}

(3)DoublyLinkedList类

publicclass DoublyLinkedListimplements LList{ DoubleNodehead;

@Override

publicboolean isEmpty() {

// TODO Auto-generated method stub

returnthis.head.next==null;

}

@Override

publicint size() {

// TODO Auto-generated method stub

DoubleNode temp = this.head.next;

int count = 0;

while(temp!=null){

count++;

temp = temp.next;

}

return count;

}

@Override

public T get(int i) {

// TODO Auto-generated method stub

DoubleNode temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

return temp.data;

}

}

}

@Override

publicvoid set(int i, T x) {

// TODO Auto-generated method stub

DoubleNode temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

temp.data = x;

}

}

}

@Override

public T remove(int i) {

// TODO Auto-generated method stub

int count=0;

DoubleNode temp = this.head;

DoubleNode p;

for(; ; temp=temp.next){

if(count+1==i){

p = temp.next;

temp.next = temp.next.next;

temp.next.next.prev = temp;

return(T) p;

}

count++;

}

}

@Override

publicvoid clear() {

// TODO Auto-generated method stub

this.head.next = null;

}

@Override

publicint search(Object key) {

// TODO Auto-generated method stub

int i=0;

DoubleNode temp = this.head.next;

for(; temp.next!=null; temp=temp.next){

i+=1;

if(temp.data.equals(key)){

break;

}

}

return i;

}

@Override

publicboolean contains(Object key) {

// TODO Auto-generated method stub

DoubleNode temp = this.head.next;

for(; temp.next!=null; temp=temp.next){

if(temp.data.equals(key)){

returntrue;

}

}

returnfalse;

}

@Override

public T insertDifferent(T x) {

// TODO Auto-generated method stub

DoubleNode p=this.head;

while (p!=null&& !p.data.equals(x))

{

p = p.next;

}

if (p!=null)

{

System.out.println("x="+x+",元素重复,未插入。"); return(T)p;

}

return(T)(p.next = new DoubleNode(x, p, null));

}

}

5,根据循环双链表表的成员方法声明。

SortedCirDoublyList类

publicclass SortedCirDoublyList {

public DoubleNodehead;

public SortedCirDoublyList(){

this.head = new DoubleNode();

this.head.prev = this.head;

this.head.next = this.head;

}

public SortedCirDoublyList(T[] values){

this();

DoubleNode rear = this.head;

for (int i=0; i

rear.next = new DoubleNode(values[i], rear, this.head);

rear = rear.next;

}

this.head.prev = rear;

}

public SortedCirDoublyList(CirDoublyListlist){ this();

DoubleNode rear = this.head;

for (DoubleNode p=list.head.next; p!=list.head; p=p.next){ rear.next = new DoubleNode(p.data, rear, this.head);

rear = rear.next;

}

this.head.prev = rear;

}

}

6,实现循环双链表类,接着再查看LList接口中的方法并实现。

(1)List接口类

publicinterface LList {

boolean isEmpty();

int size();

T get(int i);

void set(int i,T x);

String toString();

T remove(int i);

void clear();

int search(T key);

boolean contains(T key);

T insertDifferent(T x);

T remove(T key);

boolean equals(Object obj);

}

(2)双结点类

package Lab2;

publicclass DoubleNode {

public T data;

public DoubleNodeprev,next;

public DoubleNode(T data, DoubleNodeprev, DoubleNode next){

this.data = data;

this.prev = prev;

this.next = next;

}

public DoubleNode(T data){

this(data, null, null);

}

public DoubleNode(){

this(null, null, null);

}

public String toString(){

returnthis.data.toString();

}

}

(3)CHDoublelyLinkedList类

package Lab2;

publicclass CHDoublelyLinkedListimplements LList { DoubleNodehead;

@Override

publicboolean isEmpty() {

// TODO Auto-generated method stub

returnthis.head.next==null;

}

@Override

publicint size() {

// TODO Auto-generated method stub

DoubleNode temp = this.head.next;

int count = 0;

while(temp!=head){

count++;

temp = temp.next;

}

return count;

}

@Override

public E get(int i) {

// TODO Auto-generated method stub

DoubleNode temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

return temp.data;

}

}

}

@Override

publicvoid set(int i, E x) {

// TODO Auto-generated method stub

DoubleNode temp = this.head;

int count = 0;

while(true){

count+=1;

temp = temp.next;

if(count==i){

temp.data = x;

}

}

}

@Override

public E remove(int i) {

// TODO Auto-generated method stub

int count=0;

DoubleNode temp = this.head;

DoubleNode p;

for(; ; temp=temp.next){

if(count+1==i){

p = temp.next;

temp.next = temp.next.next;

temp.next.next.prev = temp;

return(E) p;

}

count++;

}

}

@Override

publicvoid clear() {

// TODO Auto-generated method stub

this.head.next = null;

this.head.prev = null;

}

@Override

publicint search(Object key) {

// TODO Auto-generated method stub

int i=0;

DoubleNode temp = this.head.next;

for(; temp.next!=head; temp=temp.next){ i+=1;

if(temp.data.equals(key)){

break;

}

}

return i;

}

@Override

publicboolean contains(Object key) {

// TODO Auto-generated method stub

DoubleNode temp = this.head.next;

for(; temp.next!=head; temp=temp.next){

if(temp.data.equals(key)){

returntrue;

}

}

returnfalse;

}

@Override

public E insertDifferent(E x) {

// TODO Auto-generated method stub

DoubleNode p=this.head;

while (p!=head&& !p.data.equals(x)){

p = p.next;

}

if (p!=head){

System.out.println("x="+x+",元素重复,未插入。");

return(E)p;

}

return(E) (p.next = new DoubleNode(x, p, head));

}

}

7,分别采用循环单链表、双链表或循环双链表求解约瑟夫环问题,并分析各操作效率。

分析:

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

运作原理:

1、一群人围在一起坐成环状(如:N)

2、从某个编号开始报数(如:K)

3、数到某个数(如:M)的时候,此人出列,下一个人重新报数

4、一直循环,直到所有人出列,约瑟夫环结束

(1)循环单链表

public class Josephus_SinglyLinkedList {

public Josephus_SinglyLinkedList(int number, int start, int distance) { SinglyLinkedList list = new SinglyLinkedList();

// 采用单链表存储约瑟夫环的元素,元素类型是字符串

for (int i = number - 1; i>= 0; i--)

list.insert(0, (char) ('A' + i) + "");

System.out

数据结构第二实验

8583 顺序栈的基本操作 时间限制:1000MS 内存限制:1000K 提交次数:530 通过次数:212 题型: 编程题语言: 无限制 Description 创建一个空的顺序栈,并实现栈的入栈、出栈、返回栈的长度、返回栈顶元素、栈的遍历等基本算法。请将下面的程序补充完整。 #include #include #define OK 1 #define ERROR 0 #define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量 typedef int SElemType; // 定义栈元素类型 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct SqStack { SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL SElemType *top; // 栈顶指针 int stacksize; // 当前已分配的存储空间,以元素为单位 }; // 顺序栈 Status InitStack(SqStack &S) { // 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE // 请补全代码 } Status Push(SqStack &S,SElemType e) { // 在栈S中插入元素e为新的栈顶元素 // 请补全代码 }

Status Pop(SqStack &S,SElemType &e) { // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR // 请补全代码 } Status GetTop(SqStack S,SElemType &e) { // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR // 请补全代码 } int StackLength(SqStack S) { // 返回栈S的元素个数 // 请补全代码 } Status StackTraverse(SqStack S) { // 从栈顶到栈底依次输出栈中的每个元素 SElemType *p = (SElemType *)malloc(sizeof(SElemType)); p = ______________________ //请填空 if(______________________)printf("The Stack is Empty!"); //请填空 else { printf("The Stack is: "); p--; while(______________________) //请填空 { printf("%d ", *p); ______________________ //请填空 } } printf("\n"); return OK; } int main() {

华南农业大学大数据库系统概念实验报告材料四

实用文档《数据库系统》实验报告四学姓名实验时间2014-12-3 号实验学时数据库模式管理4 实验名称1. SQL Plus命令手册准 2. Oracle数据字典备 3. Oracle中的数据类型材 料1. 扩掌握在企业管理器中进行表的创建和管理的方法。 2. 利用企业管理器观察数据库的物理模式。展(实此部分内容不要求在实验室完成,不用写入实验报告。) 验Oracle 9i(实及以上版本)服务器 SQL Plus/ SQL Plus work sheet客户端验 环境1.掌握使用实SQL语句进行表的创建和管理的方法 2.验加深对关系数据库结构和数据完整性等概念的理解 目的1.实创建书上university数据库中所有的表,并使用命令观察用户所有表的表名、观察每张表的结构及每张表上的约束信息。验 select * from user_tables; 内 容及步骤 实用文档desc SECTION;

select * from user_constraints where table_name = 'SECTION'; 2. 修改表结构表中增加列存储教师家庭地址,其地址包括省、市、区、街instructor在(1) 道、门牌号等列,列的数据类型自己给出,列允许为空。varchar(30),street varchar(30),city add table alter instructor (province varchar(30),house_number varchar(30)); 实用文档

设置是否成功?原因是什么表中的姓名字段长度都改1studen(2) 5,能否成功?说明原因将该字段长度改alter table student modify name varchar(10); 修改成功 alter table student modify name varchar(50); 修改成功 实用文档

(完整版)数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1 .实验目的 (1 )掌握使用Visual C++ 6.0 上机调试程序的基本方法; (2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2 .实验要求 (1 )认真阅读和掌握和本实验相关的教材内容。 (2 )认真阅读和掌握本章相关内容的程序。 (3 )上机运行程序。 (4 )保存和打印出程序的运行结果,并结合程序进行分析。 (5 )按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>// 头文件 #include// 库头文件------ 动态分配内存空间 typedef int elemtype;// 定义数据域的类型 typedef struct linknode// 定义结点类型 { elemtype data;// 定义数据域 struct linknode *next;// 定义结点指针 }nodetype; 2)创建单链表

nodetype *create()// 建立单链表,由用户输入各结点data 域之值, // 以0 表示输入结束 { elemtype d;// 定义数据元素d nodetype *h=NULL,*s,*t;// 定义结点指针 int i=1; cout<<" 建立一个单链表"<> d; if(d==0) break;// 以0 表示输入结束 if(i==1)// 建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));// 表示指针h h->data=d;h->next=NULL;t=h;//h 是头指针 } else// 建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t 始终指向生成的单链表的最后一个节点

数据结构实验答案1

重庆文理学院软件工程学院实验报告册 专业:_____软件工程__ _ 班级:_____软件工程2班__ _ 学号:_____201258014054 ___ 姓名:_____周贵宇___________ 课程名称:___ 数据结构 _ 指导教师:_____胡章平__________ 2013年 06 月 25 日

实验序号 1 实验名称实验一线性表基本操作实验地点S-C1303 实验日期2013年04月22日 实验内容1.编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。 2.编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成 (an,…..a2,a1)。(单链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,年龄) 实验过程及步骤1. #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct

{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; #include "common.h" #include "seqlist.h" void px(SeqList *A,int j); void main() { SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList)); printf("请输入线性表的长度:"); scanf("%d",&r); l->last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=l->last; i++) { scanf("%d",&l->elem[i]); } px(l,i); printf("请输入要插入的值:\n");

华南农业大学综合性、设计性实验报告

华南农业大学综合性、设计性实验报告 实验项目名称:数字电路与逻辑设计综合实验 实验项目性质:综合性、设计性实验 所属课程名称:数字电路与逻辑设计 开设时间: 2011学年第二学期 指导教师:万艳春 一、问题描述

实验题目要求它的投币口每次只能投入一枚五角或一元的硬币,投入一元五角硬币自动给出一杯饮料;投入两元(两枚一元的硬币)硬币后,再给出饮料的同时找回一枚五角硬币。故用x=0代表五角硬币,x=1代表一元硬币,y2,y1为1时分别表示给出一杯饮料和找回一枚五角硬币,至于投入的硬币数则用脉冲cp控制,投完硬币后用p=1表示确认。 二、逻辑设计 1.按照所需功能,画出状态图: 2.根据状态图画出真值表

3.画卡诺图 4.根据JK 特性方程Q n+1 =J Qn +k Qn 可得 122Q x k J == 211Q x K J == 三、 逻辑电路 1n 2n 1 n 2 n 1 1n Q Q x Q )x (Q Q ++=+ 112XQ Q Q Y2?= 2 Q X Y1= 2n 1n 2 n 1 n 2 1 +n Q Q x +Q x) +(Q =Q

四、效果与测试情况 清零后,x=0→CP→CP→CP→p=1,得到y2=1,y1=0; 清零后,x=0→CP→CP→x=1→CP→p=1,得到y2=1,y1=1; 清零后,x=0→CP→x=1→CP→p=1,得到y2=1,y1=0; 清零后,x=1→CP→x=0→CP→p=1,得到y2=1,y1=0; 清零后,x=1→CP→x=1→CP→p=1,得到y2=1,y1=1; 五、分析与讨论 本实验基本实现了所需功能,原理较简单,所用芯片也并不多; 不足的地方是每一次投币后都需确认,使过程稍显麻烦,若在 设计中能利用脉冲与输出相与,或许可以解决;而且当投币少 于1.5元时不会退回,功能较简单。 六、参考资料 [1]欧阳星明,于俊清. 数字逻辑(第四版),武汉:华中科技大学出版

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构基础及深入及考试 复习资料 习题及实验参考答案见附录 结论 1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列 3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。 4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。 5、在数据结构中,从逻辑上可以把数据结构分成( C ) A、动态结构和表态结构 B、紧凑结构和非紧凑结构 C、线性结构和非线性结构 D、内部结构和外部结构 6、算法的时间复杂度取决于( A ) A、问题的规模 B、待处理数据的初态 C、问题的规模和待处理数据的初态 线性表 1、线性表的存储结构包括顺序存储结构和链式存储结构两种。 2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。 A、(n-1)/2 B、n C、n+1 D、n-1 E、n/2 F、(n+1)/2 G、(n-2)/2 3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B ) A、正确的 B、错误的 C、不一定,与具体的结构有关 4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D ) A、必须是连续的 B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以 5、带头结点的单链表为空的判定条件是( B ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 6、不带头结点的单链表head为空的判定条件是( A ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 7、非空的循环单链表head的尾结点P满足( C ) A、p->next==NULL B、p==NULL C、p->next==head D、p==head 8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B ) A、O(1) B、O(n) C、O(n2) D、O(nlog2n) 9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )

数据结构实验二11180

理工学院实验报告 系部计算机系班级学号 课程名称数据结构实验日期 实验名称链表的基本操作成绩 实验目的: (1)掌握线性表的链式存储结构的特点; (2)掌握线性表的基本操作:初始化、插入、删除、查找数据元素等运算在链式存储结构上的实现。 实验条件:计算机一台,vc++6.0 实验容与算法思想: 容: 建立一有序的链表,实现下列操作: 1.把元素x插入表中并保持链表的有序性; 2.查找值为x的元素,若找到将其删除; 3.输出表中各元素的值。 算法思想:先创建并初始化一个顺序表(void init_linklist(LinkList)),通过循环,输入一串数据void CreateFromTail(LinkList L);创建主函数;编写算法,完成子函数(查找locate,插入insList,删除DelList,输出output)模块;调用子函数,完成实验要求 运行结果:

附:源程序: #include #include #define OK 1 #define ERROR 0 typedef char ElemType; typedef struct Node { ElemType data; struct Node* next; }Node,*LinkList; void init_linklist(LinkList *l) { *l=(LinkList)malloc(sizeof(Node)); (*l)->next=NULL; } void CreateFromTail(LinkList L) { Node *r, *s; char c; int flag =1; r=L; while(flag) { c=getchar(); if(c!='$') {

2016华南农业大学数据库考试+答案

华南农业大学期末考试试卷(A 卷) 2015-2016学年第一学期 考试科目: 数据库系统 考试类型:闭卷 考试时间: 120 分钟 学号 姓名 年级专业 Question 1: true-false question (30 points) For each of the following statements, indicate whether it is TRUE or FALSE (Using T for TRUE and F for FALSE). You will get 1 point for each correct answer, and 0 point for each wrong or blank answer. BE SURE TO WRITE YOUR ANSWER IN THE ANSWER SHEET! 1. Database systems are designed for both defining storage structures and providing mechanisms for manipulation of information. 2. Comparing with database system, file-processing system has many disadvantages such like data redundancy and consistency, concurrent-access anomalies. 3. Physical data independence in database means that the user working on the logical level need know nothing about complexity of the physical level of database. 4. The overall design of database is the database schema, while collection of data stored in the database at a particular moment is an instance of the database. 5. The Entity-Relationship data model is often used in logical

数据结构实验报告图实验

图实验一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10;

template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif MGraph.cpp

#include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) {

数据结构实验二

洛阳理工学院实验报告 系部计算机系班级学号姓名 课程名称数据结构实验日期 实验名称链表的基本操作成绩 实验目的: (1)掌握线性表的链式存储结构的特点; (2)掌握线性表的基本操作:初始化、插入、删除、查找数据元素等运算在链式存储结构上的实现。 实验条件:计算机一台,vc++6.0 实验内容与算法思想: 内容: 建立一有序的链表,实现下列操作: 1.把元素x插入表中并保持链表的有序性; 2.查找值为x的元素,若找到将其删除; 3.输出表中各元素的值。 算法思想:先创建并初始化一个顺序表(void init_linklist(LinkList)),通过循环,输入一串数据void CreateFromTail(LinkList L);创建主函数;编写算法,完成子函数(查找locate,插入insList,删除DelList,输出output)模块;调用子函数,完成实验要求 运行结果:

附:源程序: #include #include #define OK 1 #define ERROR 0 typedef char ElemType; typedef struct Node { ElemType data; struct Node* next; }Node,*LinkList; void init_linklist(LinkList *l) { *l=(LinkList)malloc(sizeof(Node)); (*l)->next=NULL; } void CreateFromTail(LinkList L) { Node *r, *s; char c; int flag =1; r=L; while(flag) { c=getchar(); if(c!='$') {

数据结构实验报告2

数据结构实验报告 二.程序设计相关信息 (1)实验题目:编写一个程序algo2-3.cpp,实现双链表的各种基本运算,并在此基础上设计一个主程序完成如下功能: 1.初始化双链表h; 2.依次采用尾插法插入a,b,c,d,e元素; 3.输出双链表h; 4.输出双链表h长度; 5.输出双链表h是否为空; 6.判断双链表h的第3个元素; 7.输出元素‘a’的位置; 8.在第4个元素位置上插入‘f’元素; 9.输出双链表h; 10.删除L的第3个元素; 11.输出双链表h; 12.释放双链表h。 (2)实验目的:熟悉双链表的基本操作并掌握尾插法建表。 (3)算法描述或流程图

(4)源代码 #include #include

typedef struct DNode { char data; struct DNode *next; struct DNode *prior; }DNode,DLinkList; void initlist(DLinkList *&h) { h=(DLinkList*)malloc(sizeof(DLinkList)) ; h->next=NULL; h->prior=NULL; } void destroylist(DLinkList *&h) { DLinkList *p=h,*q=p->next; while(q!=NULL) {free(p); p=q; q=p->next; } free(p); } int getelem(DLinkList *h,int i,char &e) {int j=0; DLinkList *p=h; while(jnext; } if(p==NULL) return 0; else { e=p->data; return 1; } } int listempty(DLinkList *h) { return(h->next==NULL&&h->prior==NULL); } int listlength(DLinkList *h) { DLinkList *p=h;int n=0; while(p->next!=NULL) {n++; p=p->next; } return (n);

数据结构实验报告

姓名: 学号: 班级: 2010年12月15日

实验一线性表的应用 【实验目的】 1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。、; 2、以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现; 4、通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的 应用和链表的建立等各种基本操作)。 【实验内容】 约瑟夫问题的实现:n只猴子要选猴王,所有的猴子按1,2,…,n编号围坐一圈,从第一号开始按1,2…,m报数,凡报到m号的猴子退出圈外,如此次循环报数,知道圈内剩下一只猴子时,这个猴子就是猴王。编写一个程序实现上述过程,n和m由键盘输入。【实验要求】 1、要求用顺序表和链表分别实现约瑟夫问题。 2、独立完成,严禁抄袭。 3、上的实验报告有如下部分组成: ①实验名称 ②实验目的 ③实验内容:问题描述:数据描述:算法描述:程序清单:测试数据 算法: #include #include typedef struct LPeople { int num; struct LPeople *next; }peo; void Joseph(int n,int m) //用循环链表实现 { int i,j; peo *p,*q,*head; head=p=q=(peo *)malloc(sizeof(peo)); p->num=0;p->next=head; for(i=1;inum=i;q->next=p;p->next=head; } q=p;p=p->next; i=0;j=1; while(i

数据结构第二次实验报告

数据结构与算法分析课程设计报告 课题名称: A Text Editor Imlementation 提交文档学生姓名:苟丁 提交文档学生学号: 0843042229 同组成员名单:无 指导教师姓名:孙界平 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2010 年 5 月 7 日

1. 实验题目:带括号的算术表达式求值 2. 实验的目的和要求: 1.采用C++的ASCII码文件和串函数实现; 2.熟练掌握串运算的应用; 3.熟练掌握计算机系统的基本操作方法,了解如何编辑、编译、链接和运行一 个C++程序; 4.上机调试程序,掌握查错、排错使程序能正确运行 3.实验的环境: 1、硬件环境:联想笔记本电脑,Intel(R) Pentium(R) Dual T3400 ,2GB内存 2、软件环境:Windows XP 下的Microsoft Visual Studio 2008 4.算法描述: ●具体操作与函数描述 (1)编辑一个文本文件,命名为text.txt. (2)函数run()提供给用户选择符的输入:w,r,I,d,f,c,q,h,n,p,b,e,g,v. 用户可以选择H选择符寻求帮助,得知操作符分别代表的动作。 (3) R代表函数Read()将文本读入缓冲区,缓冲区以前的任何内容都将将消失。 (4) W代表函数Write()将缓冲区的内容写入文本文件。 (5) I代表函数Insert()插入新行,用户可以在适当的提示下键入新行并提供新行。 (6) D代表delete()行数所执行的删除操作,可以删除当前行,并进入下一行。 (7) F代表函数findChar(),用于查找目标行。 (8) C代表函数changLine(),将用户请求的字符串修改成用户请求的替换文本,可选择的是仅在当前行中有效。 (9) Q代表函数quit(),用户执行此命令可以退出编辑。 (10)N代表函数next(),用户可以从当前行移到下一行。 (11)P代表函数pre(),用户可以从当前行移到下一行。 (12)E代表end(),可以移到最后一行。 (13)G代表go(),用户可以指定到选择的行。 (14)V查看缓冲区的全部内 ●测试程序说明:

数据结构实验二-

实 验 报 告 一、实验目的 1) 加深对图的表示法和图的基本操作的理解,并可初步使用及操作; 2) 掌握用图对实际问题进行抽象的方法,可以解决基本的问题; 3) 掌握利用邻接表求解非负权值、单源最短路径的方法,即利用Dijkstra 算法求最短 路径,同时掌握邻接表的建立以及使用方法,能够解决相关的问题; 4) 学会使用STL 中的map 抽象实际问题,掌握map ,List,,priority_queue 等的应 用。 二、实验内容与实验步骤 (1) 实验内容: 使用图这种抽象的数据结构存储模拟的欧洲铁路路线图,通过Dijkstra 算法求出欧洲旅行最少花费的路线。该实验应用Dijkstra 算法求得任意两个城市之间的最少路费,并给出路费最少的路径的长度和所经过的城市名。 (2) 抽象数据类型及设计函数描述 1) 抽象数据类型 class City : 维护一个城市的信息,包括城市名name ,是否被访问过的标记visted ,从某个城市到达该城市所需的总费用total_fee 和总路径长度total_distance ,求得最短路径后路径中到达该城市的城市名from_city 。 class RailSystem : 用邻接表模拟欧洲铁路系统,该邻接表使用数据结构map 实现,map 的key-value 课程名称:数据结构 班级: 实验成绩: 实验名称:欧洲旅行 学号: 批阅教师签字: 实验编号:实验二 姓名: 实验日期:2013 年6 月 18 日 指导教师: 组号: 实验时间:

值对的数据类型分别为string和list<*Service>,对应出发城市名和该城市与它能 够到达的城市之间的Service链表。 class Service: 为铁路系统模拟了两个城市之间的直接路线,包括两个城市之间直接到达的费用 fee,两城市之间的直接距离distance。 部分设计函数描述 ●RailSystem(const string& filename) 构造函数,调用load_services(string const &filename)函数读取数据 ●load_services(string const &filename) 读取传入的文件中的数据并建立上述两个map以模拟欧洲铁路路线图 ●reset(void) 遍历cities图,初始化所有城市的信息:visted未访问,total_distance最大 值,total_fee费用最大值,from_city为空 ●~RailSystem(void) 析构函数,用delete将两个map中所有使用new操作符开辟的空间删除 ●void output_cheapest_route(const string& from, const string& to, ostream& out); 输出两城市间的最少费用的路径,调用calc_route(string from, string to)函 数计算最少费用 ●calc_route(string from, string to) 使用Dijkstra算法计算from和to两个城市间的最少费用的路径 (3)采用的存储结构 1)map > outgoing_services 用来保存由一个城市出发可以直接到达的城市名及这两个城市之间的路径信息。 2)list 以service为指针的list表,保存两城市间的路径。 3)map cities 用来保存所有城市信息,通过城市名查找该城市有关信息。 4)priority_queue, Cheapest> candidates 存储候选的遍历城市,City*是优先队列存储的对象类型,vector是该对象的向量集合,Cheapest是比较规则。 三、实验环境 操作系统:Windows 8 调试软件:Microsoft visual studio 2012 上机地点:综合楼311 机器台号:笔记本

华南农业大学大数据库系统概念实验报告材料五

实用文档 《数据库系统》实验报告五

实用文档 salary表中表具有查询权限,A.course对A.instructor对设置同学同学2. AB 使用命令检查授权是否成功。B字段具有更新权限;同学grant select on course to cs113; 实用文档

表具有插入数据、删除数据的权限,同对B. instructorB3. 同学授权同学A 用命令试验能否完成相应操作。学Aselect * from cs113.instructor; insert into cs113.instructor values(21313,'JDY','Comp. Sci.',745363); select * from cs113.instructor; cs113.instructor where salary = 92000; delete from select * from cs113.instructor; 实用文档

表具有增、删、改、查的权限,并允许他对B. studentB5. 同学授权同学A并试验能否将权限授予A将权限授权给其它同学。同学验证授权是否成功,。C其它同学(例如同学) 实用文档select * from cs113.student; insert into cs113.student values(13221,'KJDFH','Comp. Sci.',123); update cs113.student set tot_cred = 456 where ID = 13221; select * from cs113.student; delete from cs113.student where ID = 13221; select * from cs113.student;

北京邮电大学数据结构第二次实验车厢重排实验报告

数据结构实验报告 实验名称:实验二——车厢重排 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 (1)、实验目的: ①进一步掌握指针、模板类、异常处理的使用 ②掌握栈的操作的实现方法 ③掌握队列的操作的实现方法 ④学习使用栈解决实际问题的能力 ⑤学习使用队列解决实际问题的能力 (2)、实验内容: 一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过转轨站将车厢编号按顺序重新排成1~n。转轨站共有k个缓冲轨,缓冲轨位于入轨和出轨之间。开始时,车厢从入轨进入缓冲轨,经过缓冲轨的重排后,按1~n的顺序进入出轨。缓冲轨按照先进先出方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨中的车厢编号。 2. 程序分析 2.1 存储结构 链队列: 2.2 关键算法分析 (1)、入队操作:(时间复杂度为O(1)) ①.建立新结点:rear->next=new Node ②.移动队尾指针:rear=rear->next

③.赋值:rear->data=x ④.将新结点的next指针域赋为空:rear->next=NULL 入队结构示意图如下: (2)、出队操作:(时间复杂度为O(1)) 算法伪代码如下: ①.保存队头元素指针:Node*p=front->next; ②.如果为空队则抛出异常:if(!p)throw"下溢"; ③.原队头元素出列:front->next=p->next; ④.保存队头数据:T x=p->data; ⑤.释放原队头:delete p; ⑥.若队列变为空队,修改队尾指针:if(!(front->next))rear=front; ⑦.返回出队数据:return x; 出队结构示意图如下: (3)、查找队头元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,则抛出异常:if (!(front->next))throw"上溢"; 2. 否则返回队头元素:return front->next->data; (4)、查找队尾元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,返回0:if(rear==front) return 0; 2.否则返回队尾元素return rear->data; (5)、车厢重排函数:(时间复杂度为O(n)) 算法分析:1. 建立k+2个新队列:LinkQueue *rail; rail=new LinkQueue[k+2] 2.将n节乱序的车厢放进入轨:cin>>arr[j]; rail[k].EnQueue(arr[j]) 3. 将入轨中的车厢放进缓冲轨中,设置一个变量判断车厢是否成功放进缓冲轨: while((i

数据结构实验二链表

云南大学数学与统计学实验教学中心 实 验 报 告 一、实验目的: 通过实验掌握线性链表的建立及基本操作,巩固课堂内容,练习其程序的设计与实现。 由于顺序存储结构的操作相对比较简单,而且在前期课程《高级语言程序设计》中使用得也多, 所以本次实验侧重于对线性链表存储结构上的操作及应用的实现。 二、实验内容: 本实验包含以下几个子问题: 1、 采用表尾挂入法建立一个以LA 为头指针的单链表: 2、 3、 就地逆转以LB 为头指针的单链表,即得到如下形式的单链表: 4、 将逆转后的LB 表接到LA 表之尾并构成循环链: LA 二、实验要求: 1. 每一个子问题用一个C 语言的函数来完成。 2. 对每一个子问题的结果用一个打印函数输出其结果以验证程序运行是否正确。 打印函数必须是公共的,即:用一个输出函数,既可以对单链表又可对循环链表实现,

打印输出。 3.用主函数调用各个子函数,以完成题目要求。 4.程序设计时应尽量考虑通用性,若改变题给数据仍能实现要求。 [实现提示]: .第3小题题中的“就地逆转”即只允许引入除LB外的两个工作指针来实现。 即可以以循环方式从链表首部起逐个地修改各个结点的指针:从NEXT(向后)指针改变为PRIOR(向前)的指针,并注意保存搜索时的指针。 三、实验环境 Windows win7 程序设计语言C 四、实验过程(请学生认真填写): 1. 实验设计的(各)流程图:

2. 程序设计的代码及解释(必须给出): /*----------------------------------LinkList-------------------------------------*/ /*基本要求---------------------------------------------------------------------*/ /*采用表尾挂入法建立一个以LA为头指针的单链表--------------*/ /*采用表首插入法建立一个以LB为头指针的单链表.---------------*/ /*就地逆转以LB为头指针的单链表,即得到如下形式的单链表.*/ /*将逆转后的LB表接到LA表之尾并构成循环链-------------------*/ /*每一个子问题用一个C语言的函数来完成--------------------------*/ /* 打印函数必须是公共的-------------------------------------------------*/ /*-------------------------------------Start-------------------------------------*/ /*--------------------------------------------------------------------------------*/ #include #include #include #define LIST_SIZE 10 /*--------------------------------------------------------------------------------*/ /*定义链表类型--------------------------------------------------------------*/ typedef struct LNode{ int data; struct LNode *next; }LinkList; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ main(){ LinkList *InitialList1(); LinkList *InitialList2(); LinkList *reverse(LinkList *L); void connect(LinkList *L1,LinkList *L2); void putList(LinkList *L); LinkList *L1,*L2; L1=InitialList1(); L2=InitialList2(); printf("The original of list L1:\n"); putList(L1); printf("The original of list L2:\n");

相关文档
最新文档