C源程序-链表的基本操作

合集下载

C程序设计(链表)习题与答案

C程序设计(链表)习题与答案

一、单选题1、链表不具有的特点是()。

A.不必事先估计存储空间B.插入、删除不需要移动元素C.可随机访问任一元素D.所需空间与线性表长度成正比正确答案:C2、链接存储的存储结构所占存储空间()。

A.分两部分,一部分存放结点值,另一部分存放结点所占单元数B.只有一部分,存放结点值C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针D.只有一部分,存储表示结点间关系的指针正确答案:C3、链表是一种采用()存储结构存储的线性表。

A.网状B.星式C.链式D.顺序正确答案:C4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。

struct node {char data;struct node *next;} a,b,*p=&a,*q=&b;A.(*p).next=q;B.p.next=&b;C.a.next=q;D.p->next=&b;正确答案:B5、下面程序执行后的输出结果是()。

#include <stdio.h>#include <stdlib.h>struct NODE {int num; struct NODE *next;};int main(){ struct NODE *p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d",p->num+q->next->num);return 0;}A.30B.40C.10D.20正确答案:B6、下面程序执行后的输出结果是()。

单链表的基本操作实验报告

单链表的基本操作实验报告

湖南第一师范学院信息科学与工程系实验报告课程名称:数据结构与算法成绩评定:实验项目名称:单链表的基本操作指导教师:学生姓名:沈丽桃学号: 10403080118 专业班级: 10教育技术实验项目类型:验证实验地点:科B305 实验时间: 2011 年 10 月20 日一、实验目的与要求:实验目的:实现线性链表的创建、查找、插入、删除与输出。

基本原理:单链表的基本操作二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。

2.软件环境:Windows XP 操作系统,TC2.0或VC++。

三、实验内容:(原理、操作步骤、程序代码等)#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct celltype{int element;struct celltype*next;};typedef int position;void main(){struct celltype*head,*p;int x,choice;void INSERT(int x,struct celltype*p);void LOCATE(int x,struct celltype*p);void DELETE(int x,struct celltype*p);p=(struct celltype*)malloc(sizeof(struct celltype));head=p;p->element=0;p->next=NULL;printf(“Please option:1:Insert 2:Locate 3:Delete\n”);printf(“Please choose:”);scanf(“%d”,&choice);switch(choice)case 1:printf(“Please input a node:”);scanf(“%d”,&x);p=head;INSERT(x,p);for(p=head;p!=NULL;p=p->next)printf(“%d”,p->element);printf(“\n”);break;case 2:printf(“Please input the data you want to locate:”); scanf(“%d”,&x);p=head;LOCATE(x,p);break;case 3:printf(“Please input the data you want to delete:”); scanf(“%d”,&x);DELETE(x,p);for(p=head;p!=NULL;p=p->next)printf(“%d”,p->next);printf(“\n”);break;}void INSERT(int x,struct celltype*p){struct celltype*t,*q;q=(struct celltype*)malloc(sizeof(struct celltype)); q->next=x;while((x>p->element)&&(p!=NULL)){t=p;p=p->next;}if((x>p->element)&&(p->next!=NULL)){p->next=q;q->next=NULL;}else{q->next=p;t->next=q;}}void LOCATE(int x,struct celltype*p){while(p->next!=NULL)if(p->next->element==x)printf(“the number %d is in %d\n”,x,p);else printf(“the number not exist!\n”);}void DELETE(int x,struct celltype*p){while((p->element!=x)&&(p->next!=NULL)){t=p;p=p->next;}if(p->element==x)t->next=p->next}error C2018:unknown character ’Oxal’error C2065:’Please’:undeclared identifiererror C4024:’printf’:different types for formal and actual parameter 1error C4047:’function’:’const*differs in levers of indirection from ’int’error C2146:syntaxerror:missing’)’before identifier’option’error C2017:illegal escape sequenceerror C2059:syntax error:’)’error C2143:syntax error:missing’)’before’%’出现了很多错误,主要是因为printf里的一对双引号不是英文状态下的。

c链表库函数

c链表库函数

c链表库函数全文共四篇示例,供读者参考第一篇示例:C语言是一种广泛应用于系统编程的高级语言,而链表(Linked List)是C语言中常用的数据结构之一。

在C语言中,链表并不像数组一样有现成的库函数可以直接调用,需要通过自定义函数来实现链表的操作。

为了方便使用链表,不少开发者封装了链表操作的库函数,提供了一些常用的链表操作接口,以供开发者使用。

本文将介绍一些常见的C链表库函数及其用法。

一、链表的概念及基本操作链表是一种线性表的存储结构,由若干节点(Node)组成,每个节点包含数据域和指针域。

数据域用于存放数据,指针域用于指向下一个节点。

链表的最后一个节点指针域为空(NULL),表示链表的末尾。

常见的链表操作包括创建链表、插入节点、删除节点、遍历链表、查找节点等。

下面我们来看看C语言中常用的链表库函数。

二、常见的C链表库函数1. 创建链表在C语言中,创建链表的函数通常包括初始化链表头节点和链表节点的操作。

```#include <stdio.h>#include <stdlib.h>//定义链表节点typedef struct node {int data;struct node* next;} Node;2. 插入节点插入节点是链表操作中的重要操作,可以在链表的任意位置插入新节点。

常见的插入方式包括头部插入和尾部插入。

```//头部插入节点void insertNodeAtHead(Node* head, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = head->next;head->next = newNode;}以上是常见的C链表库函数,这些函数可以帮助我们更方便地操作链表。

在实际开发中,可以根据需要自定义更多的链表操作函数,以满足具体的需求。

链表c语言课程设计

链表c语言课程设计

链表c语言课程设计一、教学目标本章节的教学目标是使学生掌握链表的基本概念、原理和操作方法,能够运用链表解决实际问题。

具体目标如下:1.知识目标:•了解链表的定义、特点和基本操作;•掌握单链表、双向链表和循环链表的概念及其应用;•理解链表的优缺点和适用场景。

2.技能目标:•能够使用C语言实现链表的基本操作,如创建、插入、删除和遍历;•能够根据实际需求设计和实现链表的扩展功能,如排序、查找等;•能够运用链表解决实际问题,如数据存储和传输等。

3.情感态度价值观目标:•培养学生对计算机科学的兴趣和热情,提高他们对编程和数据结构的学习积极性;•培养学生团队合作意识和沟通能力,鼓励他们积极参与讨论和合作解决问题;•培养学生勇于尝试和探索的精神,鼓励他们在遇到困难和挫折时坚持不懈。

二、教学内容本章节的教学内容主要包括链表的基本概念、原理和操作方法。

具体内容包括以下几个方面:1.链表的定义和特点:介绍链表的定义、特点和基本术语,如节点、链表、单链表、双向链表等。

2.链表的基本操作:讲解链表的基本操作,如创建、插入、删除和遍历,并给出相应的C语言实现代码示例。

3.单链表的应用:介绍单链表在实际问题中的应用,如链表排序、链表查找等,并给出相应的代码示例。

4.双向链表和循环链表:讲解双向链表和循环链表的概念及其应用,并给出相应的代码示例。

5.链表的优缺点和适用场景:分析链表的优缺点和适用场景,让学生了解链表在实际编程中的应用和限制。

三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法相结合的方式进行教学。

具体方法如下:1.讲授法:通过讲解和演示链表的基本概念、原理和操作方法,使学生掌握链表的基础知识。

2.案例分析法:通过分析实际问题中的应用案例,使学生了解链表在实际编程中的作用和应用。

3.实验法:让学生通过动手实践,自己编写代码实现链表的基本操作,提高他们的编程能力和实际问题解决能力。

4.讨论法:学生进行小组讨论,鼓励他们积极参与交流和合作解决问题,培养他们的团队合作意识和沟通能力。

c语言链表实验报告

c语言链表实验报告

c语言链表实验报告C语言链表实验报告引言:链表是一种常见的数据结构,它在计算机科学中有着广泛的应用。

通过链表,我们可以动态地存储和操作数据,实现各种复杂的算法和数据结构。

本实验旨在通过使用C语言,实现一个简单的链表结构,并演示其基本操作和应用。

一、链表的定义和基本概念链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

相比于数组,链表具有动态性,可以根据需要动态地分配和释放内存空间。

链表的基本概念包括头节点、尾节点、节点插入和节点删除等。

二、链表的实现1. 定义节点结构体在C语言中,我们可以通过定义结构体来表示链表的节点。

结构体中包含一个数据成员和一个指向下一个节点的指针成员。

2. 创建链表为了创建一个链表,我们首先需要定义一个头节点,并将其指针指向NULL。

然后,通过动态分配内存,创建其他节点,并将它们按照一定的顺序链接起来。

3. 插入节点链表的插入操作可以在链表的任意位置进行。

我们可以在头节点之后或者指定节点之后插入新的节点。

插入操作的关键是修改指针的指向,使得新节点能够正确地链接到链表中。

4. 删除节点链表的删除操作可以删除链表中的任意节点。

删除操作的关键是修改指针的指向,使得被删除节点的前一个节点和后一个节点能够正确地链接起来,并释放被删除节点的内存空间。

三、链表的应用链表作为一种常见的数据结构,有着广泛的应用。

以下是链表的一些常见应用场景:1. 队列和栈链表可以用来实现队列和栈这两种常见的数据结构。

通过在链表的头部或尾部进行插入和删除操作,可以实现队列和栈的基本功能。

2. 图的表示在图的表示中,链表可以用来表示图的邻接表。

每个顶点对应一个链表,链表中存储该顶点的邻接点。

通过链表的插入和删除操作,可以方便地修改图的结构。

3. 文件系统在文件系统中,链表可以用来表示文件的目录结构。

每个目录对应一个链表,链表中存储该目录下的文件和子目录。

通过链表的插入和删除操作,可以方便地管理文件和目录。

c语言链表操作题

c语言链表操作题

c语言链表操作题C语言链表操作题一、问题描述假设有一个链表,每一个节点都包含一个整数,节点的结构体定义如下:```struct ListNode {int val;struct ListNode *next;};```请你完成以下链表操作函数:1. `struct ListNode* createList(int *arr, int size)`:传入一个整数数组和数组的长度,返回一个链表的头节点,链表的节点顺序和数组顺序一致。

2. `void displayList(struct ListNode *head)`:传入链表的头节点,打印链表中所有的节点值,用空格隔开,最后换行。

3. `int lengthOfList(struct ListNode *head)`:传入链表头节点,返回链表的长度。

4. `void insertNode(struct ListNode *head, int index, int val)`:传入链表的头节点、插入的位置和插入的值,在指定位置插入一个新节点。

5. `void deleteNode(struct ListNode *head, int index)`:传入链表的头节点和删除的位置,删除指定位置的节点。

6. `void reverseList(struct ListNode *head)`:传入链表的头节点,翻转整个链表。

7. `int findValInList(struct ListNode *head, int val)`:传入链表的头节点和要查找的值,返回第一个匹配的节点的下标,如果没有匹配的,则返回-1。

二、解题思路1. 创建链表:根据数组中元素的数量,循环遍历数组,每结构体当做链表节点,并记录对应下一个节点,最后返回链表头节点。

2. 打印链表:循环遍历链表的每一个节点,打印节点的val,并在每个节点之间添加空格,最后在尾部添加换行符。

3. 计算链表长度:从链表头节点开始循环遍历每一个节点,直到当前节点的next指针指向NULL,每遍历到一个节点就计数器加1。

链表c语言经典例题

链表c语言经典例题

链表c语言经典例题
链表是计算机科学中的经典数据结构之一,常用于存储和操作动态数据。

以下是一些常见的链表例题,可以帮助理解链表的基本操作和应用。

1. 链表的创建:
- 创建一个空链表。

- 创建一个包含指定节点值的链表。

2. 链表的插入操作:
- 在链表的头部插入一个节点。

- 在链表的尾部插入一个节点。

- 在指定位置插入一个节点。

3. 链表的删除操作:
- 删除链表的头节点。

- 删除链表的尾节点。

- 删除指定数值的节点。

4. 链表的查找操作:
- 查找链表中指定数值的节点。

- 查找链表的中间节点。

5. 链表的逆序操作:
- 反转整个链表。

- 反转链表的前 N 个节点。

- 反转链表的一部分区间内的节点。

6. 链表的合并操作:
- 合并两个有序链表,使其有序。

- 合并 K 个有序链表,使其有序。

7. 链表的环检测:
- 判断链表中是否存在环,若存在,则返回环的起始节点。

8. 链表的拆分操作:
- 将一个链表按照奇偶位置拆分成两个链表。

以上是一些链表的经典例题,通过解答这些例题,可以加深对链表结构和基本操作的理解。

在编写对应的 C 语言代码时,需要注意链表节点的定义、指针的使用以及内存的动态分配和释放等问题。

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲一、课程任务:1、课程性质:《C语言程序设计》是专业基础课,是数据结构、操作系统、面向对象程序设计等课程的前导课程,也是一门实践性很强的课程。

2、主要内容:C语言程序设计初步,算法的基本概念,常量、变量、运算符与表达式,程序控制结构,函数,编译预处理,数组,指针,结构体与共用体,位运算及文件等。

3、基本要求:通过本课程的学习,使学生了解算法的基本概念,能够比较熟练地掌握C语言的语法规则及程序设计的基本方法与编程技巧,了解进行科学计算的一般思路,培养学生应用计算机解决和处理实际问题的思维方法与基本能力,并初步积累编程经验,会根据算法编制相应的程序,并初步掌握软件开发过程的基本技巧,同时也为后继课程的学习打下坚实的基础。

二、教学内容第1章C程序设计基本知识(理论2学时,实践2学时)1.教学目的与要求:1)了解C语言的背景2)掌握C语言程序的结构3)领会C语言程序设计的风格2.教学内容:1)C程序介绍2)C程序的基本结构3)基本输入和输出方法4)C程序的上机步骤5)C程序的运行环境3.重点:1)C程序的基本结构2)基本输入和输出方法3)C程序的上机步骤4.教学难点:1)基本输入和输出方法2)C程序的上机步骤5.主要教学环节的组织:结合上机掌握C语言的运行环境,并运行一些简单的C程序6.实验初识Visual C++6.0环境及运行C( 2学时)目的和要求:1)熟练掌握在Visual C++ 6.0 IDE中创建Win32控制台应用程序的操作技能。

包括:源程序的编辑、编译、连接和执行操作2)熟练掌握项目文件的布局。

包括:新建工程、源程序及可执行程序的目录文件结构。

3)基本掌握C程序的最基本框架结构,模仿示范实例完成程序的编制与运行。

4)基本掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。

第2章算法及其描述(理论2学时)1.教学目的与要求:1)掌握算法的基本概念与特征2)掌握结构化程序设计的基本概念2.教学内容:1)算法的概念2)算法举例3)算法的特征4)算法的表示5)结构化程序设计方法3.重点:1)算法的概念2)N-S图3)常用算法思想。

c语言中linklist的作用

c语言中linklist的作用

c语言中linklist的作用C语言中LinkList的作用什么是LinkListLinkList(链表)是C语言中用来存储和操作数据的一种数据结构。

它与数组相比,拥有更灵活的插入和删除操作。

链表由节点(Node)组成,每个节点包含一个数据项和一个指向下一个节点的指针。

链表的头节点是链表的起始点,尾节点则指向NULL。

LinkList的作用1.动态内存分配:链表的节点可以动态地分配和释放内存,因此链表可以根据实际需要进行动态的添加和删除操作,不受固定大小的限制。

2.插入和删除操作效率高:由于链表的特性,插入和删除操作只需要修改节点指针的指向,而不需要移动其他节点,因此链表在某些特定场景下可以比数组更高效。

3.实现高级数据结构:链表可以用来实现其他高级数据结构,比如栈(Stack)和队列(Queue),或者作为其他数据结构的底层实现。

4.提供灵活的数据结构设计:链表可以设计成单向链表、双向链表或循环链表,根据实际需求选择合适的链表结构。

LinkList的应用场景链表在许多编程问题中都有着广泛的应用,以下是一些常见的应用场景: - 线性表:链表可以实现线性表,可以用来存储和操作一组有序的数据。

- 多项式运算:链表可以用来存储和运算多项式,实现多项式的相加、相乘等操作。

- 图的表示:链表可以用来表示图的连接关系,比如邻接链表表示法。

- 高级数据结构:链表可以作为实现其他高级数据结构的基础,比如树(Tree)、图(Graph)等。

- 文件操作:链表可以用来实现文件的读取和写入操作,链表可以实现文件的增删改查等功能。

总结链表作为一种灵活和高效的数据结构,广泛应用于C语言的编程中。

通过链表,我们可以动态地分配内存,高效地进行插入和删除操作。

而且,链表还可以作为其他高级数据结构的基础实现,扩展了数据结构的功能和应用场景。

在C语言中,掌握链表的使用方法和原理,对于编写高效的程序和解决复杂的编程问题都有很大的帮助。

《程序设计基础Ⅱ》课程教学大纲

《程序设计基础Ⅱ》课程教学大纲

《程序设计基础Ⅱ》课程教学大纲一、课程与任课教师基本信息二、课程简介《程序设计基础》是为软件工程专业开设的第一门程序设计课程。

本课程以C语言为载体,介绍程序设计语言的基本概念、结构化程序设计的一般方法以及算法的概念及其表示方式,C语言的基本数据类型及其运算、三种基本程序控制结构、编译预处理、数组、函数的嵌套调用与递归调用、结构体与共用体、指针及其应用、文件及其操作等,为后续其它程序设计语言与工具、学科基础课程、专业课程学习提供程序设计的基础。

三、课程目标结合专业培养目标,提出本课程要达到的目标。

这些目标包括:1.知识与技能目标通过本课程的学习,理解算法的概念与表示方式,掌握用程序框图或N-S 图对问题解决的算法思想的描述和表达。

掌握C语言的基本数据类型及其运算、三种基本程序控制结构、编译预处理、数组、函数的嵌套调用与递归调用、结构体与共用体、指针及其应用、文件及其操作。

通过学习和实践,逐步掌握程序设计的基本思想和方法,培养问题求解和语言的应用能力。

为后续课程打好基础。

2.过程与方法目标在本课程的学习过程中,学生将学习结构化程序设计的基本思想、方法。

通过大量的编程实践,使学生初步具备对现实世界问题进行抽象思维和分析,对解决问题的算法思想进行描述和表达的能力。

理解程序错误的主要方面与原因,掌握程序调试与排除错误的基本方法,培养良好的程序设计和调试能力。

3.情感、态度与价值观发展目标通过本课程的学习,使学生了解学习与运用、学习与能力的辩证关系。

培养学生独立思考、合理分配和利用时间、不断总结、提高学习效率的良好学习方法。

坚持不懈、勤于思考、严谨治学的科学态度,为未来的学习、工作奠定良好基础。

四、与前后课程的联系本课程是软件工程专业开设的第一门程序设计课程。

本课程讲授的内容在后续的专业基础课程和专业课程,如:算法与数据结构、操作系统、以及其它后续程序设计语言与工具课程中都有具体体现,是学习好上述后续课程重要基础。

c语言链表的基本操作

c语言链表的基本操作

c语言链表的基本操作(1)单链表的创建// 定义单链表结构体struct Node{int data; // 节点元素值struct Node *next; // 指向下一节点的指针};// 创建单链表struct Node * list_create(){struct Node *head; // 保存头节点struct Node *p1, *p2; // 临时指针int data;// 分配新节点p1 = (struct Node *)malloc(sizeof(struct Node));p2 = p1; // 维持p1指向新节点printf("Please input data:\n");scanf("%d", &data);// 保存数据和指针p1->data = data;p1->next = NULL;if(data != 0) {// 循环录入while(data != 0) {// 分配新节点p1 = (struct Node *)malloc(sizeof(struct Node));p1->next = NULL;// 保存数据scanf("%d", &data);p1->data = data;p2->next = p1;p2 = p1;}}head = p1;printf("Single list create success!!\n");return head;}(2)单链表的插入// 向单链表插入元素void list_insert(struct Node *list){struct Node *p1, *p2;int data;printf("Please input insert data:\n");scanf("%d", &data);// 分配新节点p1 = (struct Node *)malloc(sizeof(struct Node));p1->data = data; // 保存数据p2 = list; // p2指向头指针// 查找插入位置while ((p2 != NULL) && (p2->data < data)){p1 = p2;p2 = p2->next; // 遍历单链表}if (list == p2) // 在最前面插入{p1 = p2; // p1头指针指向头结点list = p1;}// 保存插入位置p1->next = p2;// 插入新节点p1->next->next = p2->next;printf("List insert success!!\n");}(3)单链表的删除// 删除单链表中的节点void list_delete (struct Node *list){struct Node *p1, *p2;int data;printf("Please input delete data:\n");scanf("%d", &data);p1 = list;// 查找删除位置while ((p1->next != NULL) && (p1->next->data < data)) {p1 = p1->next; // 遍历单链表}// 找到要删除的节点if (p1->next->data == data){p2 = p1->next; // 保存要删除的节点p1->next = p2->next; // 指针指向要删除的下一节点// 释放要删除的节点free(p2);printf("List delete success!!\n");}else{printf("No data in list!!\n");}}(4)单链表的查找// 查找单链表中的元素void list_fetch (struct Node *list){struct Node *p;int data;p = list;printf("Please input fetch data:\n");scanf("%d", &data);// 查找插入位置while (p != NULL){if (p->data == data){printf("Fetch success!!\n");break;}p = p->next; // 指针指向下一节点}if (p == NULL){printf("No data in list!!\n");}}(5)单链表的遍历// 遍历单链表void list_traverse (struct Node *list){struct Node *p;printf("Single list traverse: \n");p = list;while (p != NULL) // 遍历单链表{printf("%d ", p->data);p = p->next;}}(6)单链表的销毁// 销毁单链表void list_destory (struct Node *list){struct Node *p;while (list != NULL){p = list; // 保存头指针list = list->next; // 移除头节点// 释放free (p);}printf("Destory list!!\n");}。

用C语言结构体类型指针实现数据结构链表操作

用C语言结构体类型指针实现数据结构链表操作


{ 成员表列 } 变量名表列 ; 方法3 : 直接定义结构体类型变量 。 般形 式 : s t r u c t { 成 员表列 ; } 变量名表 列 ; ( 3 ) 结构体类 型变量 的引用 在定义 了结构体类型变量之后 , 不可 以对其整体进行 引用 , 而 只能对结构体变量 中的各个成员分 别进行 引用 。 引用 的方 式为 : 结 构体变量名 . 成员名 , 其 中“ . ” 是成员运算符 , 它在所有 的运算符 中 优先级最高 。 例如: s t u d e n t 1 . h u m表 示 s t u d e n t 1 变 量 中的 n u m成 员 ,  ̄s t u - d e n t l 的n u m( 学号) 项, 可 以对成员项进行运算和输入输出等引用。

设 计 开发
用 C语言结构体类型指针实现数据结构链表操作
王 敬
f 天津市红桥 区职工大学 天津 3 0 0 1 3 1 )
摘要: 本 文介绍 了结构 体 类型 的基 本原 理及 定 义方法 , 利 用结构体 类型 变量作 为链表 中的数据 项 比较 符合 实际应 用 中的需要 。 因此 , 文章 分别 介 绍 了定 义结构 体 指针 的方 法和建 立 结构体 类 型结 点的 单 向链表 的具 体描 述 。 关键词 : 结构体 链 表 指针 中图分 类号 : T P 3 1 2 文献 标识 码: A 文章 编号 : 1 0 0 7 — 9 4 1 6 ( 2 0 1 3 ) 0 4 — 0 1 6 5 — 0 2
1 结构体类型
1 . 1概 述
在学 习了C 语言基本类型数据之后 , 在处理一些 实际问题的时 候, 往往需要将多种基本类型数据组合成一个有机整体 , 以便一起 引用 , 整体 中的数据相互联系 , 形成一组有特殊 含义 的数据 , 这样 的 个 组合 项被 称为结构体。 例如 : 一个学生信息就可 以看成一个结 构体 , 学生信息包括学号、 姓名、 性别、 年龄、 成绩 、 籍贯等 内容 , 每一 项内容又是一个基 本类型变量 , 可 以分别定义为学号 ( 整型) , 姓名 ( 字符串) 、 性别( 字符型) 、 年龄( 整型) 、 成绩( 单精度实型) 、 籍贯 ( 字符 串) 。 将这些有特殊含义的变量放在一个结构体中 , 相当于高级语言 中的“ 记录” 。 数据结 构链表 中的每 一个数据 项不一定都是单一数 据, 大多数情 况下都是一个组合项做为一个数据项 , 这时就需要用 到结构体做数 据项 。 1 . 2结 构 体 类 型 变 量 定 义 ( 1 ) 声明结构体类 型的一般 形式 : s t r u c t 结构体名 2结构体类型数据的指针 { 成 员表列 } ; 2 . 1定 义指 向 结构体 变量 的指 针 其 中, “ 结构体名” 用作结构体类型的标志 , “ 成 员表 列” 是该结 首 先声 明一 个 结 构 体 类型 s t r u c t s t u d e n t , 然 后 定 义一 个 s t r u c t 构体 中的成员表列 , 由它们组成一个结构体 。 例如 : 建立一个学员信 S t u d e n t 类型 的变量s t u d e n t 1 和指针P , 指针P 指向s t u d nt e 1 的首地址 , 息的结构 体 , 如下所示 。 如 下所 示 。 s t r u c t s t u d e n t ma i n () {i n t n u m; , 号≈ , {s t r u c t s t u d e n t c h a r n a me [ 2 0 】 ; / 姓名 / {i n t n u m; / 学号} / h a c r S e X; / { 性别} / ha c r n a me [ 2 0 】 ;/ } 姓 名 / i nt a ge; , 辱 , c h a r s e x ; / 性 别} / lo f a t s c o r e ; / } 成绩} / i n t a g e , 年 , c h a r a d d r [ 2 0 ] ; / 籍贯 / l f o a t s c o r e ; / } 成绩} / } ; c h a r a d d r [ 2 0 ] ;/ } 籍 贯 / ( 2 ) 定义结 构体类型变量的方法 } ; 方法 1 : 先声 明结构 体类型再定义变量名 。 s t r u c t s t u d e n t s t u d e n t 1 ; / 定义结构体类型变量s t u —

数据结构程序填空题

数据结构程序填空题

数据结构程序填空题一、题目描述编写一个程序,实现对链表的基本操作。

链表是一种常见的数据结构,用于存储和操作一系列数据元素。

本程序要求实现链表的初始化、插入、删除和查找等功能。

二、程序设计1. 链表结构定义首先,我们需要定义链表的结构。

链表由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

我们可以使用结构体来定义链表节点的数据结构。

```ctypedef struct Node {int data;struct Node* next;} Node;```2. 链表初始化链表的初始化操作是创建一个空链表。

我们可以定义一个指向链表头节点的指针,并将其初始化为NULL。

```cNode* head = NULL;```3. 链表插入链表的插入操作是将一个新节点插入到链表中的指定位置。

我们可以定义一个函数来实现链表的插入操作。

```cvoid insert(Node** head, int data, int position) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if (position == 0) {newNode->next = *head;*head = newNode;} else {Node* current = *head;int i;for (i = 0; i < position - 1 && current != NULL; i++) {current = current->next;}if (current == NULL) {printf("Invalid position\n");return;}newNode->next = current->next;current->next = newNode;}}```4. 链表删除链表的删除操作是将链表中指定位置的节点删除。

c课程设计链表

c课程设计链表

c 课程设计链表一、教学目标本节课的学习目标主要包括以下三个方面:1.知识目标:学生需要掌握链表的基本概念,了解链表的原理和结构,熟悉链表的基本操作,如创建、插入、删除和遍历。

2.技能目标:学生能够运用链表知识解决实际问题,具备使用链表编程的能力。

3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生分析问题和解决问题的能力,培养学生的团队合作精神。

二、教学内容本节课的教学内容主要包括以下几个部分:1.链表的基本概念和原理:介绍链表的定义、特点和应用场景,让学生了解链表作为一种数据结构的重要性。

2.链表的结构和操作:讲解链表的结构,包括节点结构和链表的创建、插入、删除和遍历等基本操作。

3.链表的应用:通过实例分析,让学生学会如何运用链表解决实际问题,提高编程能力。

三、教学方法为了实现本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:教师讲解链表的基本概念、原理和操作,引导学生掌握链表知识。

2.案例分析法:分析实际案例,让学生学会运用链表解决具体问题。

3.实验法:让学生动手实践,完成链表的创建、插入、删除和遍历等操作,提高编程能力。

4.小组讨论法:分组讨论,培养学生的团队合作精神和沟通能力。

四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:提供相关章节,为学生提供系统的链表知识。

2.参考书:为学生提供更多的学习资料,拓展知识面。

3.多媒体资料:制作PPT等课件,直观展示链表的结构和操作。

4.实验设备:为学生提供电脑等实验设备,进行链表操作实践。

五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:关注学生在课堂上的参与程度、提问回答、小组讨论等,记录学生的表现,占总成绩的30%。

2.作业:布置与链表相关的编程练习,检查学生的理解和掌握程度,占总成绩的20%。

3.考试:安排一次链表知识考试,测试学生对链表概念、原理和操作的掌握,占总成绩的50%。

数据结构:链表的应用-求两个一元多项式之和

数据结构:链表的应用-求两个一元多项式之和

!= NULL && p2 == NULL) || (p1 == NULL && p2 != NULL)) || p1 != NULL || p2 != NULL) { if(p1 == NULL && p2 != NULL) {
Pnode pnew = (Pnode)malloc(sizeof(Pnode)); if(NULL == pnew) { exit(-1); }
printf("\n"); }
int main(void) {
Pnode p1,p2; int a,b; char x;
printf("输入未知字母(如 x,y,z 等):"); scanf("%c",&x);
精美文档
5
printf("输入第一个多项式的项数:"); scanf("%d",&a); p1 = init(a);
printf("输入幂数:"); scanf("%d",&b); pnew->mi = b;
精美文档
2
ptail->next = pnew; pnew->next = NULL;
ptail = pnew; }
return phead; }
Pnode jia(Pnode p1,Pnode p2) {
构建中止 未命名 2: 15 个错误, 1 个警告
2.最后一次调试
--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

C语言-链表

C语言-链表

NWPU—CC—ZhangYanChun
13

void main( )
{┇
for(i=1; i<=N; i++)
/*建立链表*/
{┇
}
for(i=1; i<=N; i++)
/*输出链表*/
{ if(i==1) p1=head;
/*p1指向首节点*/
else p1=p1->next; /*p1指向下一节点*/
第第9十页,一共2章8页。 结构体与共用体
NWPU—CC—ZhangYanChun
10
3) 重复第2步,建立并链接多个节点直至所需长
度,将末尾节点的next成员赋值0。
head
1048 p1 1370 p1
2101
2304
1012
2918
89.5
90
85
操作:
1370
1012
NULL
pp22
p2
p1=(struct student *)malloc(len);
成功,返回存储块起始指针,该指针类型为
void *;否则返回空指针(NULL)。
内存释放函数原形:void free(void *p); 功能:释放p所指向的内存块。
包含文件:malloc.h、stdlib.h中均有其原型声明。
C 程序设计
第第4十页,一共2章8页。 结构体与共用体
NWPU—CC—ZhangYanChun
第第5十页,一共2章8页。 结构体与共用体
NWPU—CC—ZhangYanChun
6
6) 链表的类型
单链表:每个节点只有一个指向后继节点的指针 双向链表:每个节点有两个用于指向其它节点的指针;

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲一、课程性质、目的和任务《C语言程序设计》课程是理工类非计算机专业本科学生必修的专业基础课程之一。

通过本课程学习,使学生掌握结构化程序设计的方法,培养学生规范的程序设计风格,严谨的程序设计思想,初步具备较强的编程实践能力,为后续专业课程的学习及解决相关专业工程实际问题奠定基础。

二、教学内容及教学基本要求第一章软件开发简介1.软件工程:理解软件的概念;了解软件工程的相关知识。

2.程序介绍:了解程序的概念;了解程序设计过程及方法;理解并掌握算法的概念、特性以及表示方法。

3.数据结构:了解数据结构的概念及分类;理解基本的数据结构:线性表、栈、队列以及树等。

4.VC++ 6.0集成开发环境:了解C程序的运行环境;理解运行C程序的步骤;掌握运行C程序的基本方法。

第二章C语言基础知识1.C程序的基本结构:理解C程序的基本结构。

2.C语言的基本组成:了解C语言的基本字符集;掌握标识符的命名规则;理解并掌握库函数的使用。

3.C语言的基本数据类型:了解C语言数据类型的种类;理解C语言的基本数据类型及其表示形式。

4.常量和变量:理解常量和变量的特点;掌握变量的定义方法;掌握变量赋初值的方法;了解变量的作用域。

5.算术运算符和算术表达式:掌握算术运算符的运算规则和优先级别;掌握算术表达式的构成和计算。

6.赋值运算符和赋值表达式:理解赋值运算符的含义;掌握复合赋值运算符的运算规则和赋值表达式的构成及计算。

7.关系运算符和关系表达式:理解关系运算的含义;理解并掌握关系运算符的运算规则和优先级;掌握关系表达式的应用。

8.逻辑运算符和逻辑表达式:理解逻辑运算符的含义;理解并掌握逻辑运算符的运算规则和优先级;掌握逻辑表达式的应用。

9.逗号运算符和逗号表达式:掌握逗号运算符的运算规则;掌握逗号表达式的使用。

10.位运算符和位运算表达式:了解各种位运算符的运算规则;掌握位运算符运算规则和优先级。

11.各类型数据间的混合运算及数据类型转换:掌握不同类型数据间的混合运算规则。

数据结构全部上机实验及答案

数据结构全部上机实验及答案

淮海工学院数据结构实验指导书计算机软件教研室实验1线性表的抽象数据类型的实现实验目的1)掌握线性表的顺序存储结构和链式存储结构;2)熟练掌握顺序表和链表基本算法的实现;3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);5)按时提交实验报告。

实验环境计算机、C语言程序设计环境实验学时2学时,必做实验。

实验内容一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内;2)打印(遍历)该线性表(依次打印出表中元素值);3)在线性表中查找第i个元素,并返回其值;4)在线性表中第i个元素之前插入一已知元素;5)在线性表中删除第i个元素;6)求线性表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。

按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):1)创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;2)打印(遍历)该链表(依次打印出表中元素值);3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5)在链表中按照有序方式插入一已知字符元素;6)在线性表中删除第i个结点;7)计算链表的长度。

实验步骤一、顺序表的源程序#include<stdlib.h>#include<stdio.h>#include<malloc.h>int list[25];int i,n,a,sum=0,k,l;int eleminsert;/*------------------创建函数--------------*/void initlist(){printf("Please input the total of the elems:");scanf("%d",&n);if(n>25||n<1) {printf("ERROE!");return;}printf("Please input the elems:...\n");for(i=0;i<n;i++){scanf("%d",&list[i]);}return;}/*------------------打印函数--------------*/void Print(int list[],int n){int j;for(j=0;j<n;j++)printf("%d\t",list[j]);printf("\n");return;}/*------------------查找函数------------*/int Search(int list[],int n,int m){if(m<1||m>n){printf("ERROR!\n"); return ;}else printf("The elem is %d at %d place\n",list[m-1],m); return;}/*----------------插入函数------------*/void Insert(int list[],int n,int m,int elem){int j;if(m<1||m>n){printf("ERROR!\n"); return ;}for(j=n-1;j>=m-1;i--){list[j+1]=list[j];}list[m-1]=elem;n=n+1;printf("The new list are:" );Print(list,n);return;}/*---------------删除函数-----------*/void Delete(int list[],int n,int m){int q;int j;if(m<1||m>n){printf("ERROR!\n"); return ;}j=list[m-1];for(q=m-1;q<=n;q++){list[q]=list[q+1];}printf("The new list are:");Print(list,n-1);free(j);return;}/*-------------求和函数------------*/void Sum(int list[],int n,int sum){int j;for(j=0;j<n;j++){sum=sum+list[j];}printf("The sum is :%d",sum);return;}void menu(){int j;/*------------菜单函数------------*/menulab:printf("********************** MENU ******************\n\n"); printf("Create a new int list :...................press 1\n\n"); printf("Print the whole list :....................press 2\n\n"); printf("Search by order :........................press 3\n\n"); printf("Insert the elem in the place i:...........press 4\n\n"); printf("Delete the elem by order :................press 6\n\n"); printf("Sum all elem in the list :................press 7\n\n"); printf("exit the programe :.......................press 0\n\n"); printf("********************** END *******************\n\n"); printf("Please choose the number from (0~7).....");checklabel: scanf("%1d",&j);getchar();if(j<0||j>7){printf("Error! Please choose again......");goto checklabel;}printf("\n\tYou choose the number %d\n ",j);printf("\n\tPress any key to continue.....");getchar();clrscr(); /*clear screen*/{case 1:/*创建任意整数线性表*/initlist();clrscr(); /*clear screen*/goto menulab;case 2: /*打印(遍历)该线性表*/printf("The original list is:");Print(list,n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 3:/*在线性表中查找第i个元素,并返回其值*/printf("Input which LNode you want to Search(Input number):"); scanf("%d",&a);getchar();Search(l,n,a);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 4:/*在线性表中第i个元素之前插入一已知元素*/printf("Please input the elem's place where you want to insert"); scanf("%d",&k);printf("Input the elem which you want to insert:");scanf("%d",&eleminsert);Insert(list,n,k,eleminsert);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 5:/*在线性表中删除第i个元素*/printf("Please input the elem you want to delete:");scanf("%d",&l);n=n+1;Delete(list,n,l);n=n-1;printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 6:/*求线性表中所有元素值(整数)之和*/Sum(list,n,sum);printf("Press any key to continue.....");clrscr(); /*clear screen*/goto menulab;case0:/*退出程序*/printf("Press any key to continue.....");getchar();exit(0);}}void main(){void menu();menu();}二、链表(带头结点)的源程序#include<stdlib.h>#include<stdio.h>struct LNode{char elem;struct LNode* next;}*l,*p,*new;int i,a,k,n;char c,s;/*----------------创建函数-------------*/void intilist(void){l=(struct LNode *)malloc(sizeof(struct LNode));l->next=NULL;clrscr();printf("Input the total of the elems:.....");scanf("%d",&n);getchar();if(n>15)printf("Error!");for(i=n;i>0;i--){new=(struct LNode *)malloc(sizeof(struct LNode)); new->next=l->next;l->next=new;}p=l;while(p->next!=NULL) p=p->next;p->next=l;printf("Input elems:.......\n");p=l->next;for(i=1;i<=n;i++){scanf("%c",&p->elem);getchar();p=p->next;}return;}/*----------------排序函数-------------*/ void Sequence(struct LNode * l, int n) {int i;char swap,*e,*f;for(i=1;i<=n-1;i++){ p=l->next;while(p->next!=l){if(p->elem>p->next->elem) {e=&p->elem;f=&p->next->elem;swap=*e;*e=*f;*f=swap;} p=p->next;}}return;}/*----------------打印函数-------------*/void Print(struct LNode * l, int n){int i;p=l->next;for(i=1;i<=n;i++){printf("%c\t",p->elem);p=p->next;}printf("\n");return;}/*----------------查找函数-------------*/ void Locate(struct LNode * l, int n,int m) {int i;if(m>n) { printf("FALSE!\t");return; }else { p=l;for(i=1;i<=m;i++){p=p->next;}printf("The elem is:%c\n",p->elem);}return;}/*------已知字母匹配首结点查找函数------*/void LocateLNode(struct LNode * l, int n,char m){int i;p=l;for(i=1;i<=n;i++){p=p->next; if(p->elem==m) {printf("TRUE!\n");return;}} if(i>n) printf("FALSE!\n");return;}/*----------------插入函数-------------*/void Insert(struct LNode * l, int n,char m){new=(struct LNode *)malloc(sizeof(struct LNode));new->next=l->next;l->next=new;new->elem=m;n=n+1;Sequence(l,n);Print(l,n);return;}/*----------------删除函数-------------*/void Delete(struct LNode * l, int n,int m){int i;p=l;for(i=1;i<m;i++){p=p->next;}p->next=p->next->next;n=n-1;printf("The new list is:");Print(l,n);return;}/*----------------求表长函数-------------*/void Length(int n){int i;int length=0;for(i=1;i<=n+1;i++){length=length+sizeof(struct LNode);}printf("The length of the list is:%d",length);return;}/*----------------菜单函数-------------*/void menu(){int j;menulab:printf("********************** MENU ******************\n\n"); printf("Create the new list :..................press 1\n\n"); printf("Sequence the list :...................press 2\n\n"); printf("Search the Lnode by order :............press 3\n\n"); printf("Search the Lnode by elem :.............press 4\n\n"); printf("Insert the elem :......................press 5\n\n"); printf("Delete the elem by order :.............press 6\n\n"); printf("Return the length of the list :........press 7\n\n"); printf("exit the programe :....................press 0\n\n"); printf("********************** END *******************\n\n"); printf("Please choose the number from (0~7)....."); checklabel: scanf("%1d",&j);getchar();if(j<0||j>7){printf("Error! Please choose again......");goto checklabel;}printf("\n\tYou choose the number %d\n ",j);printf("\n\tPress any key to continue.....");getchar();clrscr(); /*clear screen*/switch(j){case 1:/*创建链表并输入元素*/intilist();clrscr(); /*clear screen*/goto menulab;case 2: /*排序并打印链表*/Sequence(l,n);printf("The orignal list is:\n");Print(l,n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 3:/*查找第i个元素*/printf("Input which LNode you want to locate(Input number):"); scanf("%d",&a);getchar();Locate(l,n,a);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 4:/*查找与已知字符相同的第一个结点*/printf("Input the elem you want to search ");scanf("%c",&c);getchar();LocateLNode(l,n,c);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 5:/*插入已知字符的结点*/printf("Input the elem you want to insert:");scanf("%c",&s);getchar();Insert(l,n,s);n=n+1;printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 6:/*删除第i个结点*/printf("Input which one you want to delete:");scanf("%d",&k);if(k<1||k>n)printf("ERROR!");else{Delete(l,n,k);}n=n-1;getchar();clrscr(); /*clear screen*/goto menulab;case 7:/*计算链表长度*/Length(n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case0:/*退出链表程序*/printf("Press any key to continue.....");getchar();exit(0);}}/*------------------主函数---------------*/main(){void menu(void);menu();}测试数据与实验结果(可以抓图粘贴)一、顺序表程序抓图及其简要说明菜单选项如下图所示:该菜单由八个函数组成,实现八项功能。

第十一章C语言实际应用

第十一章C语言实际应用

第十一章 C 语言实际应用[ 目的要求]1. 了解用C语言程序设计实用程序的过程;2. 掌握链表在程序设计中的应用方法。

[ 基本内容]1. 用C语言程序设计实用程序的过程;2. 使用自上而下的设计方法进行程序设计;3. 链表的基本操作。

[ 课时安排]建议: 2 学时。

11.1 C 语言程序设计基本步骤1 、程序设计方法包括三个基本步骤:第一步: 分析问题。

第二步: 画出程序的基本轮廓。

第三步: 实现该程序。

(1)编写程序;(2)测试和调试程序;,(3)提供数据打印结果。

2、每一步的具体细节:1 )分析问题,在这一步, 你必须:a. 作为解决问题的一种方法, 确定要产生的数据(输出)。

作为这一子步的一部分, 你应定义表示输出的变量。

b. 确定需产生输出的数据(称为输入), 作为这一子步的一部分, 你应定义表示输入的变量。

c. 研制一种算法, 从有限步的输入中获取输出。

这种算法定义为结构化的顺序操作, 以便在有限步内解决问题。

就数字问题而言, 这种算法包括获取输出的计算, 但对非数字问题来说, 这种算法包括许多文本和图象处理操作。

2)画出程序的基本轮廓在这一步, 你要用一些句子(伪代码)来画出程序的基本轮廓。

每个句子对应一个简单的程序操作。

对一个简单的程序来说, 通过列出程序顺序执行的动作, 便可直接产生伪代码。

然而, 对复杂一些的程序来说, 则需要将大致过程有条理地进行组织。

对此, 应使用自上而下的设计方法。

当使用自上而下的设计方法时, 你要把程序分割成几段来完成。

列出每段要实现的任务, 程序的轮廓也就有了, 这称之为主模块。

当一项任务列在主模块时, 仅用其名加以标识, 并未指出该任务将如何完成。

这方面的内容留给程序设计的下一阶段来讨论。

将程序分为几项任务只是对程序的初步设计。

整个程序设计归结为下图所示的流程图 1.。

块主奔爹奔菊住任E 任如果把主模块的每项任务扩展成一个模块 ,并根据子任务进行定义的话 ,那么,程序设 计就更为详细了(见图2.)。

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

链表的基本操作源程序
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
typedef char elemtype;
typedef struct node
{ elemtype data;
struct node *next;
}lnode;
typedef lnode *linklist;
linklist init(linklist l)
{
l=(linklist)malloc(sizeof(lnode));
if(!l) printf("分配内存出错!");
else l->next=NULL;
return(l);
}
int empty(linklist l)
{ if (l->next==NULL) return(1);
else return(0);
}
int length(linklist l)
{ linklist p=l->next;
int len=0;
while(p)
{
p=p->next;
len++;
};
return(len);
}
lnode getnode(linklist l,int pos) {
lnode e;
linklist p=l;
int cur_pos=0;
if(pos<1||pos>length(l)) exit(1);
while(p&&cur_pos<pos)
{ p=p->next;
cur_pos++;
};
e=*p;
return(e);
}
void delnode(linklist l,int pos) {
linklist p=l;
int cur_pos=0;
if(pos<1||pos>length(l)) exit(1); while(p&&cur_pos<pos-1)
{ p=p->next;
cur_pos++; };
p->next=p->next->next;
}
void clearlist(linklist l)
{
linklist p=l->next;
while(p)
{l->next=p->next;
free(p);
p=l->next; };
}
void destorylist(linklist l)
{
linklist p=l;
while(p)
{ l=p->next;
free(p);
p=l;};
}
lnode prior(linklist l,int pos)
{
return(getnode(l,pos-1));
}
lnode next(linklist l,int pos)
{
return(getnode(l,pos+1));
}
void print(linklist l)
{
linklist p=l->next;
while(p)
{ printf("%c",p->data);
p=p->next;};
printf("\n");
}
void insert(linklist l,int pos,elemtype x)
{
linklist s,p=l;
int cur_pos=0;
if(pos<1||pos>length(l)+1) {printf("插入位置有错!");getch();exit(1); };
while(p&&cur_pos<pos-1)
{ p=p->next;
cur_pos++;};
s=(linklist)malloc(sizeof(lnode));
s->data=x;
s->next=p->next;
p->next=s;
}
main()
{
linklist l;
char ch,x;
int pos,pos1,pos2,i=1;
l=init(l);
printf("***************************链表演示程序********************\n"); printf("请输入用来建立链表的字符,输入?表示输入完毕:\n");
ch=getchar();
while(ch!='?')
{ insert(l,i,ch);
ch=getchar();
i++;
};
printf("**********************您建立的链表为:");
print(l);
printf("**********************判断此链表是否非空:");
if(empty(l)) printf("空!\n");
else printf("非空!\n");
printf("**********************您输入的链表长度为:%d",length(l)); printf("\n");
printf("*********请输入你想取得的元素位置(1=<位置<=%d):",length(l)); scanf("%d",&pos);
printf("第%d个元素为%c\n",pos,getnode(l,pos).data);
fflush(stdin);
printf("*******请输入需要插入的元素以及位置,输入时用逗号隔开:"); scanf("%c,%d",&x,&pos1);
insert(l,pos1,x);
printf("*************插入后新的链表如下:");
print(l);
printf("**********************请输入你想删除的元素位置:");
fflush(stdin);
scanf("%d",&pos2);
delnode(l,pos2);
printf("**********************删除后新的链表如下:");
print(l);
printf("****欢迎您和菜鸟一起共同进步,QQ558064!*****");
getch();
}。

相关文档
最新文档