单链表的一些操作

来源:互联网 发布:淘宝怎么问卖家问题 编辑:程序博客网 时间:2024/06/06 21:44
#include<iostream>using namespace std;typedef char elemtype;//以char型为例struct Node{elemtype data;Node *next;};Node *Create_W();//使用尾插法建立单链表Node *Create_T();//使用头插法每次新节点总是作为首元节点插入在链表的头节点之后。                //插入的结果是,链表中各节点中数据的逻辑顺序与输入的顺序正好相反void Delete(Node *h);//释放堆中申请的空间int Length(Node *h);//求单链表的长度void Print(Node *h);//输出单链表的长度void Insert(Node *p,elemtype x);//在单链表的p节点之后插入值为x的新节点x;int main(){cout<<"使用尾插法建立单链表:"<<endl;Node *h=Create_W();//使用尾插法建立//Node *p=h->next;//p=p->next;//Insert(p,'A');在第二个节点后插入'A'Print(h);cout<<"此链表的长度为: "<<Length(h)<<endl;Delete(h);cout<<endl;cout<<"使用尾插法建立单链表:"<<endl;h=Create_T();//使用头插法建立Print(h);cout<<"此链表的长度为: "<<Length(h)<<endl;Delete(h);return 0;}Node *Create_W()//使用尾插法建立单链表{Node *h=new Node;//建立头节点h->next=0;//指针使用前将其赋值为0是个好习惯Node *t,*p;t=h;//t为临时节点,始终指向最后一个节点elemtype ch;while((ch=getchar())!='\n'){//cout<<ch<<endl;p=new Node;//建立一个新的节点p->data=ch;//为新的节点的数据域赋值p->next=0;//最后一个节点的指针域值为0,否则最后一个节点将未被初始化,导致程序崩溃t->next=p;//将当前节点的指针域指向下一个节点t=p;//t始终指向最后一个节点}return h;}Node *Create_T()//使用头插法每次新节点总是作为首元节点插入在链表的头节点之后。{               //插入的结果是,链表中各节点中数据的逻辑顺序与输入的顺序正好相反Node *h=new Node;Node *p=0;h->next=0;elemtype ch;while((ch=getchar())!='\n'){p=new Node;p->data=ch;p->next=h->next;//新节点指向->头节点指向的之前的"新"节点h->next=p;//注意头节点的指针域总是指向最后一个节点......画图模拟便可知道如何了}return h;}void Delete(Node *h){Node *p=h;while(p){h=h->next;//头节点后移delete p;//删除之前的"头节点"p=h;//获得当前的头节点}}int Length(Node *h){Node *p=h->next;//使p指向第一个节点int i=0;while(p){i++;p=p->next;}return i;}void Print(Node *h){cout<<"此方法输出的顺序为:"<<endl;Node *p=h->next;while(p){cout<<p->data;p=p->next;}cout<<endl;}void Insert(Node *p,elemtype x){Node *s=new Node;//生成一个新节点;s->data=x;s->next=p->next;p->next=s;}


0 0
原创粉丝点击