/*
* LinkList.cpp
*
* Created on: 2015年4月20日
* Author: Administrator
* 数据结构源代码之线性表——单链表类
*/
#include<iostream>
using namespace std;
struct Tnode{//单链表结点类型,数据域名data,指针域名next
int data;
Tnode * next;
};
class LinkListClass{
private:
Tnode *head;
int size;
public:
LinkListClass(int a[], int n){//类的构造函数,利用n个元素的数组a【】创建单链表
Tnode* p;
int i;
head = new Tnode;
head->data = 0;
head->next = NULL;
for( i = n - 1; i >= 0; i--){
p = new Tnode;
p->data = a[i];
p->next = head->next;
head->next = p;
}
size = n;
}
Tnode* index(int i){//返回单链表第i个结点的指针。若0<i<size,返回该指针值,否则返回NULL
Tnode* p;
int j;
if(i < 0 || i > size){
p = NULL;
}else if(i == 0){
p = head;
}else{
p = head->next;
j = 1;
while(p != NULL || j < i){
j++;
p = p->next;
}
}
return p;
}
int getel(int i){//返回单链表的第i个元素的数据。若找到,返回该数据,否则返回NULL
if(i < 1 || i > size){
return (NULL);
}else{
Tnode* p = index(i);
return p->data;
}
}
int location(int el){//求元素el在单链表中的序号;若找到返回该序号,否则返回0
Tnode *p = head->next;
int j = 1;
while(p != NULL){
if(p->data == el){
break;
}
p = p->next;
j++;
}
if(p != NULL){
return j;
}else{
return 0;
}
}
bool insert(int loc, int el){//在单链表loc位置插入元素el,若成功返回true,否则返回false
if(loc < 1 || loc > size + 1){
return false;
}else{
Tnode* p = index(loc - 1);
Tnode* s = new Tnode;
s->data = el;
s->next = p->next;
p->next = s;
size++;
return true;
}
}
bool dele(int i){//在单链表中删除i位置元素。若成功返回true,否则返回false
if(i < 1||i > size){
return false;
}else{
Tnode* p = index(i - 1);
Tnode* s = index(i);
p->next = s->next;
size--;
return true;
}
}
};
int main(){
int i;
int a[5];
for(i = 0; i < 5; i++){
a[i] = 2 * i + 2;
}
LinkListClass myLinkListClass(a, 5);
// int j = myLinkListClass.getel(2);
// int j = myLinkListClass.getel(4);
// cout<<j<<endl;
// cout<<"Hello"<<endl;
return 0;
}
数据结构线性表之单链表
最新推荐文章于 2022-09-30 15:55:41 发布