c++ 用模板类创建一个单向链表 实现链表节点的增加、删除、输入 怎么写啊;我邮箱787121752@qq.com

最好带解释,不要抄袭
求高手 啊,三天内啊,可以加分

第1个回答  2012-06-26
sgi stl slist 源代码
第2个回答  2012-06-26
//head.h
#include<iostream.h>template<class T>class link{public: T element; link * next; link(const T& elemval, link * nextval=NULL); //带两个参数的构造函数 link(link* nextval=NULL); //带一个参数的构造函数 ~link(); //析构函数};
template<class T>class list{private: link<T> * head; link<T> * tail; link<T> * curr;public: list(); ~list(); void clear(); //清空链表 void insert(const T &); //插入一个节点,插入到当前节点的后面, void append(const T&); //在链表的尾部追加一个节点 ,传递的参数是节点的数据 T remove(); //移除当前节点后面一个节点,并返回删除节点的数据 void setFirst(); //当前指针作为了头指针 void next(); //让当前指针指向下一个 void prev(); //使得当前指针 移向前一个节点 int length(); //求链表的长度 void setPos(const int); //给当前指针,确定位置。传递的参数是所确定的位置 void setValue(const T&); //改变当前指针的数据值 T currValue(); //得到当前指针的值 bool isEmpty(); //判断链表是否为空 bool find(const T&); //查找是否有所确定的节点,参数是节点的数据 void display(); };template <class T>link<T>::link(const T & elemval,link * nextval){ element=elemval; next=nextval;}template <class T>link<T>::link(link* nextval){ next=nextval;}template <class T>link<T>::~link(){}template <class T>list<T>::list(){ tail=head=curr=new link<T>(); cout<<"执行构造函数"<<endl;}template <class T>list<T>::~list()//析构函数{ while(head!=NULL) { curr=head; head=head->next; delete curr; } cout<<"执行析构函数"<<endl;}template <class T>void list<T>::clear()//清空链表{ if(head->next==NULL) cout<<"清空链表失败!"<<endl; while(head->next!=NULL) { curr=head; head=head->next; delete curr; } curr=tail=head; }template <class T>void list<T>::insert(const T &elem)//插入到当前节点,{
curr->next=new link<T>(elem,curr->next); if(curr==tail) tail=curr->next;}template <class T>void list<T>::append(const T& item)//在链表的尾部追加一个节点 ,传递的参数是节点的数据{ tail=tail->next=new link<T>(item,NULL);}template <class T>T list<T>::remove()//移除当前节点后面一个节点,并返回删除节点的数据{ T temp=curr->next->element; link<T>* ltemp=curr->next; curr->next=ltemp->next; if(tail==ltemp) tail=curr; delete ltemp; return temp;}template <class T>void list<T>::setFirst()//当前指针作为了头指针 {
curr=head;}template <class T>void list<T>::next() //让当前指针指向下一个{ if(curr->next!=tail) curr=curr->next;}template <class T>void list<T>::prev()//使得当前指针 移向前一个节点{ link<T>* temp=head; if((curr==NULL)||curr==head) { curr=NULL; return ; } while((temp!=NULL)&&(temp->next!=curr))//应该遍历链表 temp=temp->next; curr=temp;
}template <class T>int list<T>::length() //求链表的长度{ int len=0; link<T> *temp=head; for( temp=head->next; temp!=NULL;temp=temp->next) len++; return len;}template <class T>void list<T>::setPos(const int pos )//给当前指针确定位置,传递的参数是所确定的位置 { curr=head; for(int i=0;(curr!=NULL)&&(i<pos);i++) curr=curr->next;}template <class T>void list<T>::setValue(const T& val) //改变当前指针的数据值{ if(curr!=NULL) curr->element=val;}template<class T>T list<T>::currValue(){ return curr->element;}template <class T>bool list<T>::isEmpty() //判断链表是否为空{ if(head->next==NULL) return true; else return false;}template <class T>bool list<T>::find(const T& eleval) //查找是否有所确定的节点,参数是节点的数据{ bool flag=false; link<T> *temp=head; while(temp!=NULL) { if(temp->element==eleval) { flag=true; break; } temp=temp->next; } return flag;}template <class T>void list<T>::display()//链表的输出{ link<T> *p=head; if(p->next==NULL) cout<<"The list is empty."; while(p->next!=NULL) { cout<<p->next->element<<" "; p=p->next; } cout<<endl;}//main.cpp
#include<iostream.h>#include"head.h"int main(){ list<int> s1; int k; cout<<"输入k的值:"<<endl; cin>>k; int i,m; cout<<"输入"<<k<<"个数"<<endl; for(i=0;i<k;i++) { cin>>m; s1.append(m); } s1.display(); int length=s1.length(); cout<<"长度为:"<<length<<endl; cout<<"判断链表是否为空的操作"<<endl; if(s1.isEmpty()==true) cout<<"The list is empty."<<endl; else cout<<"The list is not empty."<<endl; cout<<"插入数据的操作"<<endl; int a; cout<<"输入要插入的数据: "; cin>>a; s1.insert(a); s1.display(); cout<<"删除链表中的当前数据"<<endl; cout<<s1.remove()<<endl; s1.display(); cout<<"设置当前指针的位置"<<endl; s1.setPos(2); cout<<s1.currValue()<<endl; cout<<"设置当前指针的值"<<endl; s1.setValue(100); s1.display(); cout<<"指针向后移动一位"<<endl; s1.next(); cout<<s1.currValue()<<endl; cout<<"指针向前移动一位"<<endl; s1.prev(); cout<<s1.currValue()<<endl; s1.setFirst(); //指针指向头指针 s1.display(); cout<<"查找数据的操作"<<endl; int n; cout<<"输入想要查找的数据"<<endl; cin>>n; if(s1.find(n)==true) cout<<"能够找到这个数据 ."<<endl; else cout<<"不能找到这个数据."<<endl; cout<<"清空链表的操作"<<endl; s1.clear(); s1.display(); return 0;}

希望对你会有帮助

c++ 用模板类创建一个单向链表 实现链表节点的增加、删除、输入 怎么写...
传递的参数是节点的数据 T remove(); \/\/移除当前节点后面一个节点,并返回删除节点的数据 void setFirst(); \/\/当前指针作为了头指针 void next(); \/\/让当前指针指向下一个 void prev(); \/\/使得当前指针 移向前一个节点 int length(); \/\/求链表的长度 void setPos(const int...

用C++设计一个整型链表类list,能够实现链表结点的插入(insert)、删除...
void display(); private: node *first,*last; }; void list::push_back(int val) { node *p=new node(val); if(NULL==first) { first=p; last=p; } else { last->R=p; p->L=last; last=last->R; } } void list:

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
int number; \/*保存人数的变量*\/ stud *head; \/*head是保存单链表的表头结点地址的指针*\/ number=N;head=creat(number); \/*把所新建的单链表表头地址赋给head*\/ } 这样就写好了一个可以建立包含N个人姓名的单链表了。写动态内存分配的程序应注重,请尽量对分配是否成功进行检测。引用自:www.kn...

如何用C语言创建一个链表,实现增、删、改、查?
head->next=NULL;printf("请输入第%d个学生的学号:",i);scanf("%d",&xh);while(xh>0) \/\/从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕 { p=(NODE *)malloc(sizeof(NODE));p->st.num=xh;printf("请输入第%d个学生的姓名:",i);scanf("%s",p->st.name);printf("请...

链表中的怎么使用指针进行链表的建立、插入、删除等处理操作
1、链表建立需要节点。这是存储数据的基础,以C++语言为例,要建立这样的节点(假设存储信息的类型作为一个模板)template <class DataType> struct Node{ DataType info;\/\/节点存储的信息 Node<DataType> *next;};2、因为你是使用指针,那么,就需要动态创建结构体。使用new 运算符在堆内存中创建 Node...

怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操...
\/\/构造链表 void Create_Linklist(linklist &L){ linklist p;p=(linklist)malloc(sizeof(LNode));if(!p)exit(OVERFLOW);L=p;L->next =NULL;} \/\/节点插入 void Insert_Linklist(linklist &L){ linklist p;int n,i;printf("请输入插入节点的个数n: ");scanf("%d",&n);getchar()...

数据结构代码(用C语言) 单链表的插入和删除
\/\/链表建立 Node* creat(){ Node *head = NULL, *p = NULL, *s = NULL;int Date = 0, cycle = 1;head = (Node*)malloc(sizeof(Node));if(NULL == head){ printf("分配内存失败\\r\\n");return NULL;} head->pstnext = NULL;p = head;while(cycle){ printf("请输入数据且当...

【数据结构】C\/C++ 单链表的 创建、初始化、增、删、改、查、遍历等基 ...
C\/C++单链表的基本操作包括创建、初始化、增删改查和遍历等。首先,定义链表结构,包括数据域和指向下一个节点的指针。头插法建立链表函数Creat_LinkList()的工作流程是:动态分配链表节点,输入用户数据,通过循环将节点依次插入到链表头部,直到用户输入0为止。尾插法的创建函数Creat_LinkList_R()则是...

用C++语言的类的单链表如何实现
链表由头指针唯一确定,单链表可以用头指针的名字来命名。下面就来看一个建立带表头(若未说明,以下所指链表均带表头)的单链表的完整程序。include <stdio.h> include <malloc.h> define N 10 typedef struct node { char name[20];struct node *link;}stud;stud * creat(int n){ stud *p...

编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织...
int main(){ Link head; \/\/链表(不带头节点)int n;printf("输入链表的长度n: ");scanf("%d",&n);printf("连续输入%d个数据(以空格隔开): ",n);head=CreateLink(n);printf("\\n原本链表的节点是: ");DispLink(head);LinkSort(head);printf("\\n从大到小排序之后: ");DispLink(head)...

相似回答