单向链表的建立与遍历

软件152笪世海

#include "stdio.h"
#include <stdlib.h>
#include <time.h>

enum Status{OK,ERROR};
typedef int ElemType;

typedef struct LNode
{
ElemType data;///链表结点的元素,类型为int
LNode *next;//指向下一结点指针
}LNode,*LinkList;

Status CreatLink(LinkList &L,int n)///建立链表
{
LinkList p;
LinkList Head;
int i;
L = (LinkList)malloc(sizeof(LNode));///链表头结点
L->next = NULL;
Head = L;
if (L == NULL)
{
  return ERROR;
}

for (i = 0; i < n; ++i)
{
p = (LinkList)malloc(sizeof(LNode));///产生新结点
  if (p == NULL)
  {
   return ERROR;
  }

printf("please input a number:\n");
  scanf("%d",&p->data);
  p->next = NULL;
  Head->next = p;//尾插法插入新结点
  Head = p;
}

return OK;

}

Status DestroyLink(LinkList &L)///销毁链表
{
LinkList p = L->next;
LinkList q;

while (p != NULL)///判断下一结点是不是空
{
  q = p->next;
  free(p);///释放当前结点
  p = q;
}

free(L);///释放链表头结点

return OK;
}

Status PrintLink(LinkList L)////打印链表
{
LinkList P = L->next;
while (P != NULL)
{
  printf("%d ",P->data);
  P = P->next;
}

printf("\n");
return OK;
}

int main()
{

LinkList L;
CreatLink(L,5);
PrintLink(L);
DestroyLink(L);

return 0;
}

时间: 2024-11-06 07:33:34

单向链表的建立与遍历的相关文章

单向链表的建立,添加与删除

/*-------------------------包含头文件------------------------------------*/ #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> int count=0; /*-------------------------结构体定义部分------------------------------*/ typed

单向链表的建立(2)

链表的建立可以使用尾插法,也可以使用头插法,头插法就是从头节点开始,向前扩展节点,最后生成带头节点的单向链表,使得内容与输入相反. 链表的定义与(1)中相同,这里只介绍链表的建立函数. 1 LNode *create(int n) 2 { 3 int m; 4 LNode *head=(LNode *)malloc(sizeof(LNode)); 5 LNode *tail=(LNode *)malloc(sizeof(LNode)); 6 LNode *p; 7 head->next=NULL

单向链表的建立,插入,删除(复习一下)

#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int datetype; typedef struct node { datetype date; struct node* next; }listnode,*linklist; linklist creatlist(int num)//创建链表 { int i; linklist tail=NUL

单向链表反转算法——递归版和迭代版

最近在做笔试题时,遇到一道编程题:单向链表反转算法.一时紧张,没写出来就提前交卷了,然而交完卷就想出来了... 最初想出来的是递归版,遗憾的是没能做到尾递归,后来又琢磨出了迭代版.后来用实际编译运行测试了一遍,能正常运行. 递归版的灵感来源于<Haskell 趣学指南>中非常简洁的快速排序算法的实现,其思想是将单向链表分割头部和尾部.其中头部指是链表的第一个节点,尾部是指除去第一个节点后的子链表.通过递归的方法,将子链表继续分割成头部和尾部,直至尾部指剩下一个节点,无法继续分割,然后将头部和尾

数据结构--单向链表

C语言中,我们在使用数组时,会需要对数组进行插入和删除的操作,这时就需要移动大量的数组元素,但在C语言中,数组属于静态内存分配,数组在定义时就必须指定数组的长度或者初始化.这样程序一旦运行,数组的长度就不能再改变,若想改变,就只能修改源代码.实际使用中数组元素的个数也不能超过数组元素的最大长度,否则就会发生下标越界的错误(这是新手在初学C语言时肯定会遇到的问题,相信老师也会反复强调!!!但这种问题肯定会遇到,找半天找不到错误在哪,怪我咯???).另外如果数组元素的使用低于最大长度,又会造成系统资

线性表之单向链表的基本操作实现

这篇文章用来回顾单向链表的相关知识并实现如下几个操作: 初始化 插入 删除 逆置 销毁 且实现的链表为带头节点的单线非循环链表.由于链表在尾插入时需要遍历到链表的最后一个位置,所以我需要记住最后一个节点的位置,为此,本文会简单的实现一个单向链表的类. 0.链表的定义与类中提供的API 1 typedef int ELEMENT; 2 3 struct Node_s { 4 Node_s():data(),NEXT(nullptr){} 5 ELEMENT data; 6 Node_s * NEX

单向链表模拟

为什么出这个真理文档呢?方面以后我们的视频不断跟进,高级部分关于JDK源码的学习,所以有些基本的思维要叙述一下,包括AQS,常用数据结构,线程等等.这一个帖子主要是我以前写的模拟常用数据结构的代码,可能有些bug 并且不规范,但是重在学习思维.并没有JDK源码部分考虑多,只是简单的写了一点.分享给大家,关于线程同步器的学习我觉得先会用  然后看源码,接着模拟.好开始数据结构了. 注意:在java数据结构中模拟的话 通过数组和引用可以模拟几乎所有的结构. 链表结构的模拟 1.单向链表 a.基础结构

C语言 单向链表

1.单向链表的定义 struct student { char name[10]; float score; struct student *next; }; next作为同类型指针,指向与它所在节点一样的节点. 2.单向链表的基本操作 1)建立链表 int main() { /*定义结构指针,pnew指向新节点,head指向头节点,tail指向尾节点*/ struct student *pnew, *head, * ptail; /* 动态分配库函数malloc,分配长度为sizeof(str

c语言单向链表

一.链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.因此,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束.        链表的各