c++链表先进先出和先进后出的简单写法

一:先进先出(尾插法)

  输入1 2 3,输出1 2 3

#include<iostream>
using namespace std;
class Node {
public:
	int score;  //这里只写了一个数据域变量,可以根据需要自己加或者写成类模板都可以
	Node* next;
};
Node* create() {
	Node* head = nullptr;
	Node* p1, *p2; //单个节点没有可以用来标识的标识符,我们的p1和p2相当于两个分块的临时结点,通过这两个临时结点来完成数据的输入和结点的链接
	int n = 0;
	p1 = p2 = new Node;
	cin >> p1->score;
	//想看懂这个链条结点的搭建过程必须放到动态循环的思维里看,只看一次循环体的内容是无法建立联系的
	while (p1->score != 0) {
		n++;
		if (n == 1)   //将头结点和第一个结点连接起来
			head = p1;
		else
			p2 = p1;  //顺着第一个结点往后链接
		p1 = new Node;
		cin >> p1->score;
			p2->next = p1;
	}
	p2->next = nullptr;
	return head;
}
int main() {
	Node* ptr = create(); //创建一个链表并把头指针地址赋给ptr;便于下面的使用

	//下面是对链表的简单使用,自定义部分
	while (ptr != NULL) {
		if (ptr->score == 3) 
			cout << "you win" << endl;
		else
			cout << "you lost" << "  ";

		ptr=ptr->next; //指针移动到下一位置
	}
}

 

二:先进后出(头插法)

输入1 2 3,输出3 2 1,

// This program illustrates the building
// and traversal of a linked list.
#include <iostream>
#include <fstream>
using namespace std;
struct ListNode
{
    double value;
    ListNode* next;
    // Constructor
    ListNode(double value1, ListNode* next1 = nullptr)
    {
        value = value1; next = next1;
    }
};

int main()
{
    double number; // Used to read the file
    ListNode* numberList = nullptr; // List of numbers
    // Open the file
    ifstream numberFile("numberFile•dat");
    if (!numberFile)
    {
        cout << "Error in opening the file of numbers.";
        exit(1);
    }
    //Read the file into a linked list
    cout << "The contents of the file are: " << endl;
    while (numberFile >> number)
    {
        cout << number << " ";
        // 后面的numberlist为旧地址,然后让这个新结点的地址赋给numberlist,这个是头插法,不是尾插法
        numberList = new ListNode(number, numberList);
    }
    // 下面是链表的遍历
    cout << endl << "The contents of the list are: " << endl;
    ListNode* ptr = numberList; //为了便于理解,这里的ptr就相当于是链表第一个结点的另一个名字
    while (ptr != nullptr)
    {
        cout << ptr->value << " "; // 操作
        ptr = ptr->next; // 指针移动
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值