Luqing的专栏

苹果诱惑了夏娃,砸醒了牛顿,成为了知名手机品牌,主宰了广场舞,是水果界真正的老大?...

C++版-----链表实现

请参考以下链表的基本运算程序完成

实验二 链表的实现----教材p35页实训2

(用实验报告word版,国庆后第一次上课前交)

#include <iostream.h>
#include <stdlib.h>

struct Node
{
 char data;
 struct Node *next;
};

struct Node *CreatListF()//用头插法建立单链表
{
 char ch;
 struct Node *H=NULL;    //链表头指针开始为空
 struct Node *p; //工作指针
// ch=getchar(); //读入第1个字符
 cin>>ch;

// if(ch=='/n')
//  cout<<"你已经退出了!!/n";
/// else{
  while(ch!='0'){
   p=(struct Node *)malloc(sizeof(struct Node));//生成新结点
   p->data=ch;   //将读入的数据放入新结点的数据域中
   p->next=H;
   H=p;
  // ch=getchar(); //读入下一字符
   cin>>ch;
  }//while

 return H;
}


int length(struct Node * H)
{
 int n=1;
 struct Node *p=H;
 if(p==NULL) return -1;
 else{
  while (p->next!=NULL)
  {
   n++;
   p=p->next;
  }
 }
 return n;
}

int Locate(struct Node *H,char x)
{
 int n=1;
 struct Node *p=H;
 while (p!=NULL&&p->data!=x) //查找data域为x的第一个结点
 {
  p=p->next;
  n++;
 }
    if(p==NULL) return -1;
 else return n;
}


void Insert(struct Node **H,char x,int i)
{
 struct Node *s;
 struct Node *q=*H;
 int j=1;
 s=(struct Node *)malloc(sizeof(struct Node));
 s->data=x;
    if(i==1){
   s->next=q;
   *H=s; 
 }
 else{
  while(j<i-1&&q->next!=NULL){
  
   q=q->next;
   j+=1;
  }
  if(j==i-1){
  
   s->next=q->next;
   q->next=s;
  }
 }//else     
}

void Del(struct Node **H,int i)
{
 struct Node *p;
 struct Node *q=*H;
 int j=1;
 if(i==1){
  p=*H;
  *H=(*H)->next;
 }
 else{
  while(j<i-1&&q->next!=NULL){
  
   q=q->next;
   j+=1;
  }
  if(j==i-1){
   p=q->next;  
   q->next=p->next;
  }
  else
   cout<<"删除位置不对/n";  
 }
 if(p!=NULL)
  free(p);
}

void display(struct Node *H)
{
 struct Node *p;
 p=H;
 cout<<"单链表显示:/n";
 if (p==NULL)
  cout<<"链表为空!/n";
    else
 {
  while (p->next!=NULL) //链表存在一个以上的结点时
  {
   cout<<p->data<<"→";
   p=p->next;
  }
  cout<<p->data; //显示存在一个结点或显示最后一个结点
 }
 cout<<endl;
}

int main()
{

 cout<<"请输入字符,提示 :回车表示输入完毕!"<<endl;
 
 struct Node *H=CreatListF();

 display(H);

 cout<<"/n单链表长度="<<length(H)<<endl;
 
 cout<<"值:'a' 的位置:"<<Locate(H,'a')<<endl;
 
 
 cout<<"在位置3插入1个结点'u':/n";
 Insert(&H,'u',4);
 display(H);
 
 cout<<"在位置2插入1个结点'e':/n";
 Insert(&H,'e',2);
 display(H);

 
 cout<<"删除第1个结点:/n";
 Del(&H,1);
 display(H);
/* 
 cout<<"删除第2个结点:/n";
 Del(&H,5);
 display(H);
*/ 
 return 0;
}
 

阅读更多
想对作者说点什么? 我来说一句

c++实现链表完整代码

2017年11月07日 3KB 下载

c++链表队列的实现

2008年09月01日 4KB 下载

没有更多推荐了,返回首页

不良信息举报

C++版-----链表实现

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭