实现单链表的各种运算

编写一个程序2-1.CPP,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:
(
1)初始化单链表L
(
2)依次采用尾插法插入a,b,c,d,e元素
(
3)输出单链表L:
(
4)输出单链表L长度
(
5)判断单链表L是否为空
(
6)输出单链表L的第3个元素
(
7)输出元素a的位置
(
8)在第4个元素位置上插入f元素
(
9)输出单链表L:
(
10)删除L的第3个元素
(
11)输出单链表L:
(
12)释放单链表L

#include<stdio.h>
typedef struct _NODE_
{
    char data;//数据域

    _NODE_ * next;//指针域

}Node,*pNode;//定义指针类型

pNode Head = NULL;//头指针

pNode Tail = NULL;//尾指针

//初始化单链表
void InitpNode(pNode p){
    p=new Node();
    //if(!p)exit(OVERFLOW);
    p->next=NULL;
}
//判断链表是否为空
int isEmpty(pNode pNodeTemp){
    pNodeTemp=new Node();
    Node *p;
    int j=0;
    p=pNodeTemp->next;
    if(p==NULL){
    return 0;
    }
  else 
    return 1;
}
//释放


//尾插法插入元素
void CreateLinkNode(char a)
{
   pNode pNodeTemp = new Node;//再new一个新的结点

    if(pNodeTemp==NULL)
    {
        return ;
    }

    pNodeTemp->data = a;

    pNodeTemp->next = NULL;

    if(Head==NULL)
    {

        Head=Tail = pNodeTemp;        
    }
    else
    {
        Tail->next = pNodeTemp;
        
        Tail = pNodeTemp;        
    }

} 
//链表长度
void getLength(){
int Count=0;
    pNode pNodeTemp = Head;

    while(pNodeTemp!=NULL)
    {
        Count++;

        //printf("%c  ",pNodeTemp->data);

        pNodeTemp = pNodeTemp->next;
    }
    printf("(4)链表长度为%d\n",Count);
}
//获取第i个元素
pNode getElem(int i){
    int a=i;
    pNode pNodeTemp = Head;

    while(i-1)
    {
        pNodeTemp = pNodeTemp->next;

        i--;
    
    }

    printf("(6)第%d个元素为 %c \n",a,pNodeTemp->data);
    return pNodeTemp;
}

//元素e的位置
void getPos(char e){
pNode pNodeTemp = Head;

    int Pos=0;

    while(pNodeTemp)
    {
        Pos++;

        if(pNodeTemp->data == e)
        {
            printf("(7)元素%c的位置为%d\n",e,Pos);

            break;
        }

        pNodeTemp = pNodeTemp->next;
    }

}
//在第三个位置插入元素f
void insertElem(int n,char c){
    
pNode pNodeTemp = Head;
    for(int k=0;k<n-2;k++)
    {
        pNodeTemp = pNodeTemp->next;
    }


    pNode pNodeNew = new Node;
    
    if(pNodeNew==NULL)
    {
        return ;
    }
    int count=0;
    pNodeNew->data = c;
    
    pNodeNew->next = NULL;

    pNodeNew->next = pNodeTemp->next;

    pNodeTemp->next = pNodeNew;

    count++;

}
//打印元素
void print(pNode pNodeTemp){

    
     pNodeTemp= Head;

    while(pNodeTemp!=NULL)
    {
    
        printf("%c  ",pNodeTemp->data);
        
        pNodeTemp = pNodeTemp->next;
    }
        printf("\n");
}
//删除第i个元素
void dele(int i,pNode pNodeTemp){
    Node *p ,*q;
    p=getElem(i-1);
    q=p->next;
    p->next=q->next;
    delete q;
}
void main()
{   
    pNode  pNodeTemp;
    printf("(1)初始化单链表:\n");
    InitpNode(pNodeTemp);

    printf("(2)依次用尾插法插入a,b,c,d,e: \n");
        
    char temp = 'a';

    for(int i=0;i<5;i++)
    {
        CreateLinkNode(temp+i);
        
    } 
      printf("(3)输出单链表: ");

      print(pNodeTemp);
     
      getLength();

      printf("(5)单链表 %s\n", isEmpty(pNodeTemp)==0 ?"":"非空");
      getElem(4);
      
     getPos('a');
     printf("(8)在第三个位置上插入元素f\n");
     insertElem(3,'f');
     printf("(9)输出单链表h:");
     print(pNodeTemp);
     printf("(10)删除单链表的第4个元素:\n");
     dele(4,pNodeTemp);
     printf("(11)输出单链表: "); 
     print(pNodeTemp);
     printf("(12)释放单链表: "); 


}

//2.5实验二

#include<stdio.h>




typedef struct _NODE_
{
    char data;//数据域

    _NODE_ * next;//指针域

}Node,*pNode;//定义指针类型

pNode Head = NULL;//头指针

pNode Tail = NULL;//尾指针

//初始化单链表
void InitpNode(pNode &p){
    p=new Node();
    //if(!p)exit(OVERFLOW);
    p->next=NULL;
}
//创建单链表
void CreateLinkNode(char a)
{
    pNode pNodeTemp = new Node;

    if(pNodeTemp==NULL)
    {
        return ;
    }

    pNodeTemp->data = a;

    pNodeTemp->next = NULL;

    if(Head==NULL)
    {

        Head=Tail = pNodeTemp;        
    }
    else
    {
        Tail->next = pNodeTemp;
        
        Tail = pNodeTemp;        
    }

} 
//链表长度
void getLength(){
int Count=0;
    pNode pNodeTemp = Head;

    while(pNodeTemp!=NULL)
    {
        Count++;

        printf("%c  ",pNodeTemp->data);

        pNodeTemp = pNodeTemp->next;
    }
    printf("链表长度为%d\n",Count);
}
//获取第i个元素
void getElem(int i){
    pNode pNodeTemp = Head;

    while(i-1)
    {
        pNodeTemp = pNodeTemp->next;

        i--;
    
    }

    printf("第%d个元素为 %c \n",i+1,pNodeTemp->data);
}

//元素e的位置
void getPos(char e){
pNode pNodeTemp = Head;

    int Pos=0;

    while(pNodeTemp)
    {
        Pos++;

        if(pNodeTemp->data == e)
        {
            printf("%c的位置为%d\n",e,Pos);

            break;
        }

        pNodeTemp = pNodeTemp->next;
    }

}
//在第三个位置插入元素f
void insertElem(){
    


pNode pNodeTemp = Head;
    for(int k=0;k<2;k++)
    {
        pNodeTemp = pNodeTemp->next;
    }


    pNode pNodeNew = new Node;
    
    if(pNodeNew==NULL)
    {
        return ;
    }
    int count=0;
    pNodeNew->data = 'f';
    
    pNodeNew->next = NULL;

    pNodeNew->next = pNodeTemp->next;

    pNodeTemp->next = pNodeNew;

    count++;

}
void main()
{
    char temp = 'a';

    for(int i=0;i<5;i++)
    {
        CreateLinkNode(temp+i);
    }

    getLength();
    
    getElem(2);
     getPos(2);

    pNode pNodeNew = Head;
    
    pNode pNodeTemp= Head;

    while(pNodeTemp!=NULL)
    {
    
        printf("%c  ",pNodeTemp->data);
        
        pNodeTemp = pNodeTemp->next;
    }

    pNodeTemp = Head->next;

    pNodeTemp->next = pNodeTemp->next->next;


     pNodeTemp = Head;

     printf("\n");
    
    while(pNodeTemp!=NULL)
    {
        
        printf("%c  ",pNodeTemp->data);
        
        pNodeTemp = pNodeTemp->next;
    }

    while(Head!=Tail)
    {
        pNodeTemp = Head;

        Head = Head->next;

        delete pNodeTemp;
    }

    delete Head;
}

 

 

 

posted @ 2012-10-11 20:30  李白~~  阅读(1892)  评论(0)    收藏  举报