数据结构 单一列表

数据结构 单一列表

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



#ifndef LINKLIST_H

#define LINKLIST_H

#include<iostream>

using namespace std;

template <typename T>

struct Node

{

 T data;

 Node<T> *next;

};

template <typename T>

class LinkList

{

public:

 LinkList();                       //无參构造函数,建立仅仅有头结点的空链表

 LinkList(T a[], int n);           //有參构造函数,建立由n个元素的单链表

 ~LinkList();                      //析构函数

 int Length();                     //求单链表的长度

 T Get(int i);                     //按位查找,查找单链表中的第i个元素的数值

 int Locate(T x);                  //查找该元素在单链表中的位置

 void Insert(int i, T x);          //在第i个位置插入该元素

 T Delete(int i);                  //删除第i个元素

 void PrintList();                 //打印单链表

private:

 Node<T> *first;                  //创建单链表的头指针

};

template <typename T>

LinkList<T>::LinkList()

{

 Node<T> *first;                  //申明头结点

 first = new Node<T>;             //生成头结点

 first->next = NULL;              //初始化头节点

}

template <typename T>

LinkList<T>::LinkList(T a[], int n)

{

 Node<T> *r, *s;                //申明两个暂时结点

 first = new Node<T>;           //生成头结点

 r = first;                     //尾指针初始化

 for (int i = 0; i < n; i++)

 {

  s = new Node<T>;           //生成S结点来存储数组中相应的元素

  s->data = a[i];            //将数组中相应的元素赋值到相应结点的数值部位

  r->next = s;              

  r = s;                     //上两部是将s插入到终端结点之后

 }

 r->next = NULL;

}

template <typename T>

LinkList<T>::~LinkList()

{

 Node<T> *q = NULL;            //建立一个空的结点

 while (first != NULL)         //该循环释放结点的存储空间

 {

  q = first;

  first = first->next;

  delete q;

 }

}

template <typename T>

int LinkList<T>::Length()

{

 Node<T>*p=first->next;

 int count = 0;                   //初始化

 while (p != NULL)

 {

  p = p->next;                //p指针后移

  count++;

 }

 return count;

}

template <typename T>

T LinkList<T>::Get(int i)

{

 Node<T> *p = first->next;

 int count = 1;

 while (p != NULL&&count < i)

 {

  p = p->next;

  count++;

 }

 if (p == NULL)throw”位置”;

 else return p->data;           //单恋表中first是空结点,不算在单链表中的。所以第一个元素是在第一个结点中的。序号是相应的

}

template <typename T>

int LinkList<T>::Locate(T x)

{

 Node<T> *p = first->next;

 int count = 1;               //上述初始化工作量

 while (p != NULL)

 {

  if (p->data == x)

   return count;

  p = p->next;

  count++;

 }

 return 0;                    //推出循环查找,表示查找失败。

}
template <typename T>
void LinkList<T>::Insert(int i, T x)
{
 Node<T> *p = first;
 int count = 0;               //上述初始化工作量
 while (p != NULL&&count < i – 1)
 {
  p = p->next;
  count++;
 }
 if (p == NULL)throw”位置”;
 else
 {
  Node<T> *s;
  s = new Node<T>;
  s->data = x;
  s->next = p->next;
  p->next = s;
 }
}
template <typename T>
T LinkList<T>::Delete(int i)
{
 Node<T> *p = first;
 T x;
 int count = 0;
 while (p != NULL&&count < i – 1)
 {
  p = p->next;
  count++;
 }
 if (p == NULL || p->next == NULL)throw”位置”;
 else
 {
  Node<T> *q;
  q = p->next; x = q->data;
  p->next = q->next;
  delete q; return x;
 }
}
template <typename T>
void LinkList<T>::PrintList()
{
 Node<T> *p;
 p = first->next;
 while (p != NULL)
 {
  cout << p->data<<“->”;
  p = p->next;
 }
}
#endif
*******************************************************************
#include”LinkList.h”
#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
 int a[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
 int ch;
 LinkList<int> zxh(a,10);
 cout << “生成的单链表为:”;
 zxh.PrintList();
 cout << endl;
 cout << “1-求长度”<<setw(17);
 cout << “2-按位查找” << endl;
 cout << “3-按值查找” << setw(15);
 cout << “4-插入操作” << endl;
 cout << “5-删除操作” << setw(15);
 cout << “6-遍历操作” << endl;
 cout << “请输入您想进行的操作:”;
 cin >> ch;
 switch (ch)
 {
 case 1:zxh.Length(); break;
 case 2:int m1;
  cout << “请输入您想按位查找的位号:”;
  cin >> m1;
  zxh.Get(m1); break;
 case 3:
  int m2;
  cout << “请输入您想查找的值:”;
  cin >> m2;
  zxh.Locate(m2); break;
 case 4:int m3, m4;
  cout << “请输入想插入的位置:”;
  cin >> m3;
  cout << “请输入想插入的元素:”;
  cin >> m4;
  zxh.Insert(m3, m4); break;
 case 5:
  int m5;
  cout << “请输入想删除的位置:”;
  cin >> m5;
  zxh.Delete(m5); break;
 case 6:
  zxh.PrintList();
 }
}
这个单恋表中我自己刚才測试了一下。

基本上没什么大问题。

但似乎球的时间长短是不正确的。我希望我们能提出作证。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117352.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月7日 上午10:00
下一篇 2022年1月7日 上午10:00


相关推荐

  • github 设置代理

    github 设置代理http https 协议 设置代理 clonehttps 前缀的 repo 会走代理 gitconfigglo proxy http 127 0 0 1 1080 gitconfigglo proxy http 127 0 0 1 1080 gitconfigglo proxy socks5 127 0 0 1 1080 gitconfigglo proxy soc

    2026年3月16日
    2
  • Spark部分流程说明

    Spark部分流程说明

    2021年8月10日
    58
  • 三极管饱和及深度饱和状态的理解和判断!

    三极管饱和及深度饱和状态的理解和判断!三极管饱和问题总结:1.在实际工作中,常用Ib*β=V/R作为判断临界饱和的条件。根据Ib*β=V/R算出的Ib值,只是使晶体管进入了初始饱和状态,实际上应该取该值的数倍以上,才能达到真正的饱和;倍数越大,饱和程度就越深。2.集电极电阻越大越容易饱和;3.饱和区的现象就是:二个PN结均正偏,IC不受IB之控制问题:基极电流达到多少时三极管饱和?解答:这个值应该是不固定的,它和

    2025年10月25日
    4
  • 【DeepSeek认证】最好的MODBUS调试工具

    【DeepSeek认证】最好的MODBUS调试工具

    2026年3月16日
    3
  • 【SpringBoot】36、SpringBoot整合Redis实现发布/订阅

    【SpringBoot】36、SpringBoot整合Redis实现发布/订阅一 简介 1 发布订阅 SUBSCRIBE UNSUBSCRIBE 和 PUBLISH 实现了发布 订阅消息范例 发送者 publishers 不用编程就可以向特定的接受者发送消息 subscribers Rather 发布的消息进入通道 不需要知道有没有订阅者 订阅者发表感兴趣的一个或多个通道 并且只接受他们感兴趣的消息 不管发布者是不是存在 发布者和订阅者的解耦可以允许更大的伸缩性和更多动态的网络拓扑 2 说明本篇文章是继 SpringBoot 三十四 SpringBoot

    2026年3月19日
    3
  • 两军问题和拜占庭将军问题的区块链解读(二)

    两军问题和拜占庭将军问题的区块链解读(二)转自 https www jianshu com p 29db1b94c677 拜占庭将军问题是区块链技术中另一个经常被提到的模型 本篇将尽量用通俗的语言解释拜占庭将军问题的本质以及背后的经典算法 不当之处请指正 与两军问题一样 拜占庭将军问题也仅仅是提出了问题 并没有提出解决这个问题的方案 首先 我们需要了解什么是拜占庭将军问题 在中世纪 拜占庭帝国的几位将军各自带兵共同围困一

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号