2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
सामग्रीसूची
2. रेखीयसारणीनां मूलभूतक्रियाः
(4) बिट् क्रमेण अन्वेषणं कुर्वन्तु, मूल्येन अन्वेषणं कुर्वन्तु
i. एकललिङ्कितसूचिकायाः परिभाषा (लीड नोड्) ।
रेखीय सारणी : १.
(1).तस्मिन् प्रत्येकं तत्त्वं, .समानः दत्तांशप्रकारः。
(२).तत्त्वानां मध्ये, २.क्रमेण。
(३)शीर्षकतत्त्वम्तथापुच्छतत्त्वम्。
(4).शीर्षकं पादलेखं च विहाय प्रत्येकस्य तत्त्वस्य कृते एकं द्रष्टुं शक्यतेप्रत्यक्षपूर्ववर्तीतथाप्रत्यक्ष उत्तराधिकारी。
पीठिकाआद्यतः एव
InitList (एण्ड एल) .आरम्भीकरणम्रेखीयसारणी
DestroyList(&L): 1.1.विनश्
。
ListInsert (& एल, मैं, ई):युज्, सारणी L मध्ये i-तमे तत्त्वं e सम्मिलितं कुर्वन्तु
ListDelete(&L, i, &e):लुप्, table L इत्यस्य i-th element इत्येतत् विलोपयन्तु, तथा च deleted element इत्यस्य प्रत्यागमनार्थं e इत्यस्य उपयोगं कुर्वन्तु
。
LocateElem (L, e): प्रेसमूल्यम्अन्वेषणं कुर्वन्तु, सारणीयां विशिष्टस्य कीवर्डस्य e इत्यस्य तत्त्वं अन्वेष्टुम्, e इत्यस्य क्रमं प्रत्यागच्छन्तु, न तु उपलिपिम्
GetElem (L, i): दबाएँकिञ्चित्सारणीयां i-th element इत्यस्य मूल्यं प्राप्तुं अन्वेषणं कुर्वन्तु
。
अन्ये सामान्यक्रियाः : १.
लम्बाई(L): ज्ञात कीजिएमेजस्य नेताव्ययीकरोतु
मुद्रणसूची(L): .उत्पादनम्पीठिकासर्वेतत्व
रिक्त(L): न्यायसारणीशून्यं किम्, सत्यं वा असत्यं वा प्रत्यागच्छति
अत्यन्तं सारांशतः अर्थात् विक्रयस्य निर्माणं तथा च योजनं, विलोपनं, परिवर्तनं, परीक्षणं च
इत्यनेनक्रमिक भण्डारणदत्तांशस्य रेखीयसारणी
- #define MAX 10
- //顺序表(静态分配)
- class SqList
- {
- public:
- int data[MAX];
- int length;
- };
- //初始化
- void InitList(SqList &l)
- {
- for(int i = 0 ;i < 10 ;i++)
- {
- l.data[i] = 0;
- }
- l.length = 0;
- }
- //打印所有元素
- void PrintList(SqList &l)
- {
- for (int i = 0; i < 10; i++)
- cout << "第" << i << "个数:" << l.data[i] << endl;
- }
-
- //测验
- void test01()
- {
- SqList l;
- InitList(l);
- PrintList(l);
- }
- #define InitSize 10
- //顺序表(动态分配)
- class SqList
- {
- public:
- int* data; //指示动态分配数组的指针
- int MaxSize; //指示最大容量
- int length; //指示当前长度
- };
- //初始化顺序表
- void InitList(SqList& l)
- {
- l.data = new int[InitSize];
- l.MaxSize = InitSize;
- l.length = 0;
- for (int i = 0; i < l.MaxSize; i++)
- {
- l.data[i] = 0;
- }
- }
- //增长数组空间
- void IncreaseSize(SqList& l, int len)
- {
- int* p = l.data; //暂存原数组中的数据
- l.data = new int[10 + len]; //扩展新的数组
- for (int i = 0; i < l.length; i++) //将原数据拷贝进新数组中
- {
- l.data[i] = p[i];
- }
- l.MaxSize = InitSize + len; //修改数组的状态数据
- delete p; //将p释放
- }
- //打印所有元素
- void PrintList(SqList& l)
- {
- for (int i = 0; i < 10; i++)
- cout << "第" << i << "个数:" << l.data[i] << endl;
- }
-
- void test01()
- {
- SqList l;
- InitList(l);
- PrintList(l);
- }
//युज्
bool ListInsert (SqList& एल, int d, int ई)
{
if (l.length >= MAX) //प्रथमं निर्धारयन्तु यत् सारणी पूर्णा अस्ति वा, सम्मिलनं कानूनी अस्ति वा इति।
{
cout << "प्रवेशः विफलः, ऊर्ध्वसीमा प्राप्ता" << endl;
false प्रत्यागच्छतु;
}
यदि (d < 1 || d > ल.दीर्घता + 1) .
{
cout << "प्रवेशः विफलः, प्रत्यक्षः पूर्ववर्ती नास्ति" << endl;
false प्रत्यागच्छतु;
}
for (int j = l.length; j >= d; j--) //प्रवेशबिन्दुस्य अनन्तरं तत्त्वं पृष्ठतः चालयन्तु
l.data [j] = l.data [ज - 1];
l.data[d - 1] = e; //Insertion, यतः d संख्यां निर्दिशति, सरणीरूपान्तरणे एकं घटितव्यम्
ल.दीर्घता++;
return true;
}//लुप्
bool ListDelete (SqList& l, int d, int & ई)
{
if (d < 1 || d >l.length) //विलोपिता स्थितिः कानूनी अस्ति वा इति निर्धारयतु
false प्रत्यागच्छतु;
e = l.data[d - 1] //अस्थायीरूपेण विलोपिततत्त्वान् संग्रहयन्तु
for (int j = d; j < l.length; j++) //विलोपिततत्त्वस्य अनन्तरं तत्त्वं अग्रे चालयन्तु
l.data[j - 1] = l.data[j]; j+1 आच्छादयति, j+1 च अन्ते सरणीयाः अधिकतमक्षमताम् अतिक्रमितुं शक्नोति
ल.दीर्घता--;
return true;
}
नमूना कोड
- #define MAX 10
- //顺序表(静态分配)
- class SqList
- {
- public:
- int data[MAX];
- int length;
- };
- //初始化
- void InitList(SqList& l)
- {
- for (int i = 0; i < 10; i++)
- {
- l.data[i] = 0;
- }
- l.length = 0;
- }
- //打印所有元素
- void PrintList(SqList& l)
- {
- for (int i = 0; i < 10; i++)
- cout << "第" << i << "个数:" << l.data[i] << endl;
- }
- //存入数据
- void InputElem(SqList& l, int e)
- {
- int i = 0;
- while (i < MAX)
- {
- if (l.data[i] == 0)
- {
- l.data[i] = e;
- l.length++;
- break;
- }
- i++;
- }
- }
- //获取顺序表长度
- int GetLength(SqList l)
- {
- //cout << l.length << endl;
- return l.length;
- }
- //插入
- bool ListInsert(SqList& l, int d, int e)
- {
- if (l.length >= MAX) //首先要判断表是否已满、插入是否合法
- {
- cout << "插入失败,已达上限" << endl;
- return false;
- }
-
- if (d < 1 || d > l.length + 1)
- {
- cout << "插入失败,无直接前驱" << endl;
- return false;
- }
- for (int j = l.length; j >= d; j--) //将插入点之后的元素后移
- l.data[j] = l.data[j - 1];
- l.data[d - 1] = e; //插入,因为d指的是第几个数,在数组的换算中要减一
- l.length++;
- return true;
- }
- //删除
- bool ListDelete(SqList& l, int d, int &e)
- {
- if (d < 1 || d >l.length) //判断删除的位置是否合法
- return false;
- e = l.data[d - 1]; //暂存删除掉的元素
- for (int j = d; j < l.length; j++) //将被删除元素之后的元素前移
- l.data[j - 1] = l.data[j]; //此处,必须是j = d,j-1被j覆盖,若j = d-1,则下文的覆盖会变为j 被j+1 覆盖,而j+1在最后有可能会超过数组的最大容量
- l.length--;
- return true;
- }
-
- //查看情况
- void CheckList(SqList& l)
- {
- PrintList(l);
- cout << "当前长度为" << GetLength(l) << endl;
- }
-
- //测验
- void test01()
- {
- SqList l;
- InitList(l);
-
- //输入部分数据
- InputElem(l, 1);
- InputElem(l, 2);
- InputElem(l, 3);
- InputElem(l, 4);
- CheckList(l);
-
- //开始插入
- if(ListInsert(l, 3, 6))
- CheckList(l);
-
- //开始删除
- int a = -1;
- if (ListDelete(l, 2, a))
- CheckList(l);
- }
अतीव सरलम्, विस्तरेण गन्तुं आवश्यकता नास्ति
- //判断d的合法性
- bool JugdeD(SqList l, int d)
- {
- if (d < 1 || d > l.length)
- return false;
- return true;
- }
-
- //按位序查找
- int GetElem(SqList l, int d)
- {
- if (JugdeD(l, d))
- return l.data[d - 1];
- return 0;
- }
-
- //按值查找
- int LocateElem(SqList l, int e)
- {
- for (int i = 0; i < l.length; i++)
- {
- if (l.data[i] == e) //数组储存的数据,若是类等复杂的数据类型,则需要对等号进行重载
- return i + 1;
- }
- return 0;
- }
- //其余代码与上文相同
- //其中,JugdeD函数可以替换上文插入与删除中对位序合法性的判别————封装
इत्यनेनश्रृङ्खला भण्डारणम्दत्तांशस्य रेखीयसारणी
- //单链表
- class LNode
- {
- public:
- int data; //数据域,存放数据
- LNode* next; //指针域,指向下一个节点
- };
- //用using关键字给类起别名,用LinkList指代的是头结点,代表的是整个链表
- using LinkList = LNode*;
-
- //初始化
- bool InitList(LinkList& L)
- {
- L = new LNode();
- if (L == nullptr) //如果成立,则说明内存不足,分配失败
- return false;
- L->next = nullptr;
- return true;
- }
यदि हेड नोड् नास्ति तर्हि हेड सूचकस्य परिवर्तनं प्रति ध्यानं ददातु अन्यत् सर्वं समानम् अस्ति ।
सम्मिलितं (नियमितसंस्करणम्) २.
- //插入
- bool ListInsert(LinkList& L, int i, int e)
- {
- if (i < 1) //判断插入位点是否合法[1]——i值的合法性
- {
- cout << "i为负数" << endl;
- return false;
- }
- LNode* p = L; //让p与L指向相同的位点,L是指示头指针的,所以L是不能改变的
- LNode* s = new LNode(); //新的数据储存
- s->data = e;
- while (p != nullptr && i != 1) //由头结点起始,开始遍历寻找对应位点
- {
- p = p->next;
- i--;
- }
- if (p == nullptr) //判断插入的位点是否合法[2]——i值对应的节点的合法性
- {
- cout << "插入位点超出实际长度" << endl;
- return false;
- }
- s->next = p->next; //开始接轨,顺序不能乱
- p->next = s;
- return true;
- }
सम्मिलितं (सङ्कुलितसंस्करणम्) २.
- //特定节点的后插操作
- bool InsertNextNode(LNode* p, int e)
- {
- if (p == nullptr)
- {
- cout << "插入位点超出实际长度" << endl;
- return false;
- }
- LNode* s = new LNode();
- s->data = e;
- s->next = p->next;
- p->next = s;
- return true;
- }
- //插入
- bool ListInsert(LinkList& L, int i, int e)
- {
- if (i < 1) //判断插入位点是否合法[1]——i值的合法性
- {
- cout << "i为负数" << endl;
- return false;
- }
- LNode* p = L; //让p与L指向相同的位点,L是指示头指针的,所以L是不能改变的
- while (p != nullptr && i != 1) //由头结点起始,开始遍历寻找对应位点
- {
- p = p->next;
- i--;
- }
- return InsertNextNode(p, e); //被封装了的部分
- }