首页 > 其他分享 >链表、栈的基本操作

链表、栈的基本操作

时间:2023-10-21 18:32:26浏览次数:34  
标签:tmp return LNode int next 链表 pnode 基本操作

栈的基本操作
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MaxSize 100
typedef int ElemType;
//定义栈_顺序栈
struct Stack
{
	ElemType* top;
	ElemType* base;
	int stacksize;
};
int IsFull(Stack s);
int IsEmpty(Stack s);
//初始化
int InitStack(Stack& s)
{
	s.base = new ElemType[MaxSize];
	if (!s.base)
		return ERROR;
	s.top = s.base;
	s.stacksize = MaxSize;
	return OK;
}
//入栈
int PushbackStack(Stack& s, ElemType e)
{
	//判断栈是否满
	if (IsFull(s))
		return ERROR;
	*(s.top) = e;//error
	s.top++;
	return OK;
}
//出栈
int Popback(Stack& s, ElemType& e)
{
	//判断栈是否空
	if (IsEmpty(s))
		return ERROR;
	s.top--;
	return OK;
}
//判满
int IsFull(Stack s)
{
	if (s.top - s.base == s.stacksize)
		return 1;
	return 0;
}
//判空
int IsEmpty(Stack s)
{
	if (s.base == s.top)
		return 1;
	return 0;
}
//获取栈顶元素
ElemType StackTop(Stack s)
{
	//判断栈是否空
	if (IsEmpty(s))
		return ERROR;
	return *(s.top - 1);
}
//清除栈
int ClearStack(Stack& s)
{
	s.top = s.base;
	return OK;
}
 
int Destroy(Stack& s)
{
	delete s.base;
	s.top = s.base = NULL;
	return OK;
}
链表的基本操作
#include <iostream>
#include<cassert>
#include <iostream>
#include <string>
#include <cassert>
#include<iomanip>
 
using namespace std;
//图书
typedef struct Book
{
	string no;
	string name;
	double price;
}ElemType;
//链表
struct LNode
{
	//数据域
	ElemType data;
	LNode* next;
};
//初始化
void InitList(LNode *& L)
{
	//创建头节点
	L= new LNode;
	L->next = NULL;//头结点的指针域置空
}
//尾插法创建链表
void CreateList_B(LNode*& L, int n)
{
	
	LNode* p = L;
	for (int i = 0; i < n; i++)
	{
		//创建临时节点
		LNode* tmp = new LNode;
		cin >> tmp->data;
		//插入
		p->next = tmp;
		tmp->next = NULL;
		//更新P
		p = p->next;
	}
	
}

//删除某节点
LNode* DeleteNode(LNode*& L, LNode* pnode)
{
	LNode* tmp = L->next;
	if (tmp == pnode)
	{
		L->next = pnode->next;
		delete pnode;
		return L->next;
	}
	//找到pnode的前一个结点——tmp
	while (tmp->next != pnode)
	{
		tmp = tmp->next;
	}
	tmp->next = pnode->next;
	delete pnode;
	return tmp->next;
}

//遍历--计算长度
int TraversalList(LNode *& L)
{
	LNode* tmp = L->next;
	int count = 0;
	while (tmp)
	{
		tmp = tmp->next;
		count++;
	}
	return count;
}
//尾插
int PushbackList(LNode*& L, ElemType e)
{
	LNode* tmp = L;//error
	int count = 0;
	while (tmp->next)//tmp指向最后一个节点
	{
		tmp = tmp->next;
	}
	LNode *pnode=new LNode;
	pnode->data = e;
	pnode->next = NULL;
	//插入
	tmp->next = pnode;
	return 1;
}
//打印链表
void PrintList(LNode*& L)
{
	LNode* tmp = L->next;
	while (tmp)
	{
		//打印
		cout << tmp->data.no <<" " << tmp->data.name <<" " << fixed << setprecision(2) << tmp->data.price << endl;
		tmp = tmp->next;
	}
 
}

标签:tmp,return,LNode,int,next,链表,pnode,基本操作
From: https://blog.51cto.com/u_15805257/7969135

相关文章

  • 面试必刷TOP101:8、链表中倒数最后k个结点
    一、题目输入一个长度为n的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为0的链表。二、题解2.1快慢指针第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指......
  • 21. 合并两个有序链表
    1.题目介绍2.题解一定注意题目给的两个链表可能为空,需要提前进行判断2.1初版(就是链表最基本的插入操作)/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*List......
  • [Leetcode] 0083. 删除排序链表中的重复元素
    83.删除排序链表中的重复元素题目描述给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3] 提示:链表中节点数目在范围[0,300]......
  • 数据结构-链表
    //节点classNode{constructor(element){this.element=elementthis.next=null}}//链表classLinkList{constructor(){this.size=0this.head=null}//根据index获取节点getNode(index){if(index<0||index>......
  • 面试必刷TOP101:6、判断链表中是否有环
    一、题目二、题解2.1双指针我们使用两个指针,fast与slow。它们起始都位于链表的头部。随后,slow指针每次向后移动一个位置,而fast指针向后移动两个位置。如果链表中存在环,则fast指针最终将再次与slow指针在环中相遇。importjava.util.*;/***Definitionforsingly-linke......
  • 使用JDBC操作数据库基本操作步骤
    书写jdbc需要四大要素:用户名、密码、URL、驱动Stringurl="jdbc:mysql://localhost:3306/test";Stringusername="root";Stringpassword="root";Stringdriver="com.mysql.jdbc.Driver";注册驱动Class.forName(driver);获取连接对象Con......
  • 数据结构与算法 | 链表(Linked List)
    链表(LinkedList)链表(LinkedList)是一种线性数据结构,它由一系列节点(Node)组成,每个节点包含两部分:数据和指向下(上)一个节点的引用(或指针)。链表中的节点按照线性顺序连接在一起(相邻节点不需要存储在连续内存位置),不像数组一样存储在连续的内存位置。链表通常由头节点(Head)来表示整个链......
  • LeetCode142. 环形链表 II
    题目描述给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如......
  • LeetCode02.07. 链表相交
    描述给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。示例提交的代码publicclassSolution{publicListNodegetIntersectionNode(ListNodeheadA,ListNodeheadB){//分别计算A和B链表......
  • 面试必刷TOP101:5、合并k个已排序的链表
    一、题目二、题解顺序合并解题思路1、将k个链表配对并将同一对中的链表进行合并(采用顺序合并的方法)2、第一轮合并后,k个链表合并成了k/2个链表,平均长度2n/k,然后是k/4、k/8...等等3、重复这一过程,知道获取最终的有序链表importjava.util.*;/***Definitionforsingly-linke......