编写实现单链表的各种基本运算,并在此基础上设计一个主函数完成如下功能:

##单链表基本运算的笔记(可供一些初学者学习)
(1)初始化单链表L。
(2)依次采用尾插法插入h、e、l、l、o。
(3)输出单链表L。
(4)输出单链表L的长度。
(5)判断单链表L是否为空。
(6)输出单链表L的第2个和第4个元素。
(7)输出元素o位置。
(8)在单链表L的第4个位置上插入元素r。
(9)输出单链表L。
(10)删除单链表L的第3个元素。
(11)输出单链表L。
(12)释放单链表L。

#include <stdio.h>
#include <malloc.h>

typedef char ElemType;                                     /*相当于typedef给char换个名字Elemtype,便于之后修改,
                                                          比如你要把所有char改成int,只需要改这一个地方。*/
typedef struct LNode                                      //同理,定义结点,结点可以换一个长方形,切成两半,左边是数据域,右边是指针域
{
   
	ElemType data;                                            //相当于char data,定义数据域
	struct LNode *next;                                       //定义指针域
}LinkList;                                                //结构体变量,比如后面的LinkList *&L可以跟int x对比一下就理解了

void InitList(LinkList *&L)                               /*初始化操作:就是创建一个头结点,头结点没有data,有next,
                                                           所以头结点不为空可以与链表为不为空作区分,链表只有头结点的话,就是为空。
                                                           另外,括号里的形参有的是*&L,有的是*L,可简单记为有增减操作用*&L*/
{
   
	L = (LinkList *)malloc(sizeof(LinkList));                 /*malloc(size):用来申请一块动态内存,参数size是要申请的内存的大小,
	                                                          (LinkList *):把它转换成LinkList类型的指针,这里的类型就是前面L的类型。*/       
	L->next = NULL;                                           //L指向空。  这里的“=”可以翻译成“指向”,会容易理解。
}

int InsertList(LinkList *&L,int i,ElemType e)             //(尾插法)插入操作:在第i个位置插入元素e。  括号里的形参i,e都是手动输入的
{
   
	int j = 0;
	LinkList *p = L, *s;                                      //定义一个结构体变量 p,让它等于头结点,再定义一个结构体变量 s
	
	while((j < i - 1) && (p != NULL))                         /*这个while是这篇代码的重点,基本很多操作都需要用到,不过很简单。
	                                                          遍历:你输入想要找的位置i,当j < i - 1并且头结点不为空,那么就往后移动一个位置,
	                                                          直到位置i。一开始 p 等于头结点,最后 p 会跑到第 i 个位置。*/
	{
   
		j++;
		p = p->next;
	}
	
	if(p == NULL
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
队列(Queue)是一种常见的线性数据结构,具有先进先出(FIFO)的特点。队列有两个基本操作:入队(Enqueue)和出队(Dequeue)。队列的实现有两种方式:顺序队列和链式队列。 顺序队列的实现: 队列的顺序表示是用数组来实现的。通过一个数组和两个指针front和rear来表示一个队列。front指向队列的头部,rear指向队列的尾部。 基本运算包括: - 初始化队列 - 判断队列是否为空 - 判断队列是否已满 - 入队 - 出队 - 输出队列中所有元素 以下是c++实现: ```cpp #include<iostream> using namespace std; const int MAXSIZE = 100; //队列的最大长度 class Queue{ private: int data[MAXSIZE]; //队列数据 int front; //队列头指针 int rear; //队列尾指针 public: Queue(){ //初始化队列 front = rear = 0; } bool isEmpty(){ //判断队列是否为空 return front == rear; } bool isFull(){ //判断队列是否已满 return (rear + 1) % MAXSIZE == front; } void Enqueue(int x){ //入队 if(isFull()){ cout<<"Queue is full!"<<endl; return; } data[rear] = x; rear = (rear + 1) % MAXSIZE; } void Dequeue(){ //出队 if(isEmpty()){ cout<<"Queue is empty!"<<endl; return; } front = (front + 1) % MAXSIZE; } void PrintQueue(){ //输出队列中所有元素 if(isEmpty()){ cout<<"Queue is empty!"<<endl; return; } cout<<"Queue elements: "; int i = front; while(i != rear){ cout<<data[i]<<" "; i = (i + 1) % MAXSIZE; } cout<<endl; } }; int main(){ Queue q; q.Enqueue(1); q.Enqueue(2); q.Enqueue(3); q.PrintQueue(); //输出队列元素 q.Dequeue(); q.PrintQueue(); //输出队列元素 return 0; } ``` 程序实现了以下功能: - 初始化一个队列 - 将元素1、2、3入队 - 输出队列中所有元素 - 将队头元素1出队 - 输出队列中所有元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值