C++实现数据结构中的单链表
#include<iostream> using namespace std; //定义一个节点类 class Node{ public: int data; Node *next; Node():next(NULL){} Node(const int &value,Node *next_=NULL):data(value),next(next_){} }; //定义一个单单链表 class Linklist{ private: Node *head; public: Linklist():head(new Node){} //判断链表是否为空 bool is_empty()const { if(head->next==NULL) return true; return false; } //判断链表的长度 int get_length() { int length=0; Node *p=head->next; while(!p) { ++length; p=p->next; } return length; } //返回第i=个元素的值 Node *get_value(int i) { if(i<=0||i>get_length()) { cout<<"error"<<endl; return NULL; } else { Node *p=head->next; int j=1; while(p&&j<i) { p=p->next; ++j; } return p; } } //在第i个位置之前插入相应元素的值 bool insert_pos(int value,int i) { if(i<=0||i>get_length()) { cout<<"无法插入相应的元素"<<endl; return false; } else { int j=1; Node *p=head; while(p&&j<i) { p=p->next; ++j; } Node *newnode=new Node(value); newnode->next=p->next; p->next=newnode; return true; } } //下面顶一个采用尾插法插值的函数 void insert(int value) { Node *p=head; Node *q=p; while(p) { q=p; p=p->next; } Node *newnode=new Node(value); q->next=newnode; } void display() { if(head->next==NULL) return ; Node *p=head->next; while(p) { cout<<p->data<<'\t'; p=p->next; } } //定义一个删除某个节点的函数 void delete_node(int value) { Node *pos_node=NULL; Node *q=head; Node *p=head->next; while(p) { if(p->data==value) { pos_node=p; break; } q=p; p=p->next; } if(!p) { cout<<"找不到要删除的结点"<<endl; return ; } Node *s; q->next=pos_node->next; } }; int main() { Linklist l1; l1.insert(1); l1.insert(2); l1.insert(3); l1.insert(4); l1.insert(5); l1.insert(6); l1.insert(7); l1.display(); cout<<endl; l1.delete_node(4); l1.display(); system("pause"); return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。