厦门理工数据结构实验3

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告

实验序号:3 实验项目名称:链式表的操作

int n,i,a;//n为节点数,i为插入元素的位置,a为插入元素的值

LinkList L;

printf("请输入链式表的节点数:");

scanf("%d",&n);

CreateList_L ( L, n ); //初始化链表节点个数为n

printf("请输入要插入的位置:");

scanf("%d",&i);

printf("请输入要插入的值:");

scanf("%d",&a);

ListInsert_L(L,i,a); //在第i个位置插入元素a

ShowList_L(L); //输出链表L中的所有元素

}

运行以上程序,根据要求完成下列题目:

1.参考P30页中的例题

2.10实现ListDelete_L函数,并在主函数中测试;

2.编写一个函数计算值为3的结点个数,并在主函数中测试;

以下题目任选一题:

3.编写一个删除链表中值为3的结点的直接前趋结点的算法,若有多个值为3

的结点,则删除第一个值为3的直接前趋结点;

4.改写CreateList_L函数,使得链表创建时为非降序排列;

5.改写ListInsert_L函数,忽略位置参数,在上述非降序排列链表中插入一个

元素,使得链表依然保持非降序;

6.写一个对单循环链表进行逆序遍历(打印每个结点的值)的算法;

7.编写一个函数,将单链表中值重复的结点删除,使所得的结果表中各结点值双联表牛13,双链表牛13,牛13

第一张图第一个数据是59,截图接没了

8. 改写CreateList_L函数,采用尾插法创建带有头节点的单链表。

四、实验结果与数据处理

详细记录程序在调试过程中出现的问题及解决方法。记录程序执行的结果(贴图)。

五、分析与讨论

对上机实践结果进行分析,上机的心得体会。

六、教师评语成绩

附源程序清单:

1

只写改的和后添加的代码

Status ListDelete_L(LinkList &L, int i,ElemType &e)

{

LinkList p,q;

int j;

p=L;

j=0;

while((p->next)&&(j

{

p=p->next;

++j;

}

if(!(p=p->next)||j>i-1)

return ERROR;

q=p->next;

p->next=q->next;

e=q->data;

free(q);

return OK;

}

void main()

{

int n,i,a;//n为节点数,i为插入元素的位置,a删除相应元素后的显示质LinkList L;

printf("请输入链式表的节点数:");

scanf("%d",&n);

CreateList_L ( L, n ); //初始化链表节点个数为n

printf("请输入要删除的位置:");

scanf("%d",&i);

ListDelete_L(L,--i,a); //在第i个位置删除元素

ShowList_L(L); //输出链表L中的所有元素

}

2

# include

# include

# define ERROR 1

# define OK 0

# define OVERFLOW 1

typedef int ElemType;//给int一个别名ElemType

typedef int Status;//给int一个别名Status

typedef struct LNode{

ElemType data;

struct LNode *next;

} LNode, *LinkList;

void CreateList_L ( LinkList &L, int n )

{

// 输入n 个数据元素的值,建立带头结点的单链表L

printf("请输入插入链表的节点值:\n");

LinkList p;

int i;

L = ( LinkList ) malloc ( sizeof ( LNode ) );

L->next = NULL; // 先建立一个带头结点的空链表

for ( i = n; i > 0; i-- )

{

p = ( LinkList ) malloc ( sizeof ( LNode ) );

scanf ("%d" ,&p->data );

p->next = L->next;

L->next = p;

}

}

Status ListInsert_L ( LinkList &L, int i, ElemType e )

{

// 带头结点的单链表L中第i 个位置之前插入元素e

LinkList p,s;

int j; //j为计数器

p = L; //p指向L的头节点

j = 0;

while ( p && j

p = p->next; ++j;

}

if ( ! p || j >i-1 )

return ERROR;

s = ( LinkList ) malloc ( sizeof ( LNode ) ); // 生成新结点

s->data = e; // 使新结点数据域的值为e

s->next = p->next; // 将新结点插入到单链表L 中

相关文档
最新文档