发一个单链表的生成程序.

这个是比较完全的单链表生成的程序.
在VC可以编译成功.

#include <conio.h>

#include <dos.h>

#include <stdlib.h>
#include <stdio.h>
#define LEN sizeof(LNode)  //定义LEN为一个节点的长度

enum BOOL{False,True};  //定义BOOL型

typedef struct node

{char data;    //数据域

 struct node *next;//指向下一个节点的指针

}LNode,*LinkList;

void CreatList(LinkList &,int);   //生成一个单链表

BOOL ListInsert(LinkList &,int,char); //在单链表中插入一个元素

BOOL ListDelete(LinkList &,int,char &); //在单链表中删除一个元素

BOOL ListFind_keyword(LinkList,char,int &); //按关键字查找一个元素

BOOL ListFind_order(LinkList,char &,int);  //按序号查找一个元素

void ListPrint(LinkList);      //显示单链表所有元素

void main()

{LinkList L;

 BOOL temp;

 int num,loc,flag=1;

 char j,ch;

// textbackground(3); //设置屏幕颜色

// textcolor(15);

// clrscr();

 //---------------------程序解说-----------------------

 printf("本程序实现链式结构的线性表的操作。/n");

 printf("可以进行插入,删除,定位,查找等操作。/n");

 //----------------------------------------------------

 printf("请输入初始时链表长度:"); //输入生成单链表时的元素个数

 scanf("%d",&num);

 CreatList(L,num);      //生成单链表

 ListPrint(L);         

 while(flag)

    { printf("请选择:/n");

      printf("1.显示所有元素/n");  //显示链表元素

      printf("2.插入一个元素/n");  //插入链表元素

      printf("3.删除一个元素/n");  //删除链表元素

      printf("4.按关键字查找元素/n");  //按关键字查找

      printf("5.按序号查找元素/n"); //按序号查找

      printf("6.退出程序      /n");  //退出

      scanf(" %c",&j);

      switch(j)

       {case '1':ListPrint(L); break;

        case '2':{printf("请输入元素(一个字符)和要插入的位置:/n");

                 printf("格式:字符,位置;例如:a,3/n");

                 scanf(" %c,%d",&ch,&loc);       //输入要插入的元素和要插入的位置

                 temp=ListInsert(L,loc,ch);      //插入

                 if(temp==False) printf("插入失败!/n"); //插入失败

                 else printf("插入成功!/n"); //成功插入

                 ListPrint(L);

                 break;

                }

        case '3':printf("请输入要删除的元素所在位置:");

                scanf("%d",&loc);              //输入要删除的节点的位置

                temp=ListDelete(L,loc,ch);    //删除

                if(temp==False) printf("删除失败!/n"); //删除失败

                else printf("成功删除了一个元素:%c/n",ch);   //删除成功,显示该元素

                ListPrint(L);

                break;

        case '4':if(L->next==NULL)                   //链表为空

                   printf("链表为空!/n");

                else{printf("请输入要查找的元素(一个字符):");

                     scanf(" %c",&ch);                //输入要查找的元素

                     temp=ListFind_keyword(L,ch,loc); //按关键字查找

                     if(temp==False) printf("没有找到该元素!/n"); //查找失败

                     else printf("该元素在链表的第%d个位置。/n",loc);

                                           //成功查找,显示该元素位置

                    }

                break;

        case '5':if(L->next==NULL)                   //链表为空

                   printf("链表为空!/n");

                else{printf("请输入要查找的位置:");

                     scanf("%d",&loc);    //输入要查找的元素的位置

                     temp=ListFind_order(L,ch,loc); //按序号查找

                     if(temp==False) printf("该位置不存在!/n"); //查找失败

                     else printf("第%d个元素是:%c/n",loc,ch);

                                //成功查找,显示该元素

                    }

                break;

        default:    ;//flag=0;printf("程序结束,按任意键退出!/n");

       }

    }

getch();

}

void CreatList(LinkList &v,int n)   ///尾插法

{//生成一个带头结点的有n个元素的单链表

 int i;

 LinkList p,tail;

 v=(LinkList)malloc(LEN); //生成头结点

 v->next=NULL;
 tail=v;
 printf("请输入%d个字符:例如:abcdefg/n",n);

 getchar();

 for(i=n;i>0;--i)

    {p=(LinkList)malloc(LEN); //生成新结点

     scanf("%c",&p->data);

     /*p->next=v->next;

     v->next=p;
  */
  tail->next=p;
  tail=p;

    }
 p->next=NULL;
}

///
/*
void CreatList(LinkList &v,int n)   //头插法

{//生成一个带头结点的有n个元素的单链表

 int i;

 LinkList p,s;

 v=(LinkList)malloc(LEN); //生成头结点

 v->next=NULL;
 
 printf("请输入%d个字符:例如:abcdefg/n",n);

 getchar();

 for(i=n;i>0;--i)

    {p=(LinkList)malloc(LEN); //生成新结点

     scanf("%c",&p->data);

     p->next=v->next;

     v->next=p;

    }

}

*/

/
BOOL ListInsert(LinkList &v,int i,char e)

{//在单链表的第i各位置插入元素e,成功返回True,失败返回False

 LinkList p,s;

 int j=0;

 p=v;

 while(p&&j<i) {p=p->next;++j;} //查找第i-1个元素的位置

 if(!p||j>i) return False;  //没有找到

 s=(LinkList)malloc(LEN);     //生成一个新结点    

 s->data=e;           

 s->next=p->next;        //将新结点插入到单链表中

 p->next=s;

 return True;

}

 

BOOL ListDelete(LinkList &v,int i,char &e)

{//在单链表中删除第i个元素,成功删除返回True,并用e返回该元素值,失败返回False

 LinkList p,q;

 int j=0;

 p=v;

 while(p->next&&j<i)    //查找第i-1个元素位置

    {p=p->next;++j;}

 if(!(p->next)||j>i) return False; //查找失败

 q=p->next;p->next=q->next; //删除该元素   

 e=q->data;         //e取得该元素值

 free(q);           //释放该元素空间

 return True;

}

 

BOOL ListFind_keyword(LinkList v,char e,int &i)

{//在单链表中查找关键字为e的元素,成功返回True,并用i返回该元素位置,

 //失败返回False

 i=1;

 LinkList p;

 p=v->next;

 while((p->data!=e)&&(p->next!=NULL))//p指针指向下一个,直到

    {p=p->next;  i++;}                        //找到或到链表尾为止

 if(p->data!=e)                      //该元素在链表中不存在

     return False;

 else return True;

}

 

BOOL ListFind_order(LinkList v,char &e,int i)

{//在单链表中查找第i个元素,成功返回True,并用e返回该元素值,

 //失败返回False

 LinkList p;

 int j=0;

 p=v;

 while(p->next&&j<i)  //移动指针,直到找到第i个元素

    {p=p->next;++j;}

 if(j!=i) return False; //查找失败

 else {e=p->data;       //查找成功,用e取得该元素值

       return True;

      }

}

void ListPrint(LinkList v)  

{//显示链表所有元素

 LinkList q;

 q=v->next;

 printf("链表所有元素:");

 while(q!=NULL)

   {printf("%c ",q->data);q=q->next;}

 printf("/n");

}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<iostream> using namespace std; enum yaya { error,success }; struct node { int data; node*next; }; class List{ public: List(); ~List(); int length(); yaya set_data(int n); node* get_ptr(int m); yaya inset_node(int x,int y); int delete_node(int i); void put_in(int x); void breaktwo(List&la,List&lb); void same_data(List&l1,List&l2,List&l); int out_data(); private: int count; node* head; }; List::List(){ head=new node; head->next=NULL; count=0; } int List::length(){ return count; } yaya List::set_data(int n){ node*p=head; for(int j=0;j<n;j++){ cin>>p->data; p=p->next; count++; if(p==NULL){ return error; } } return success; } node* List::get_ptr(int m){ node*p=head; int j=0; while(p!=NULL&&j<m){ j++; p=p->next; } return p; } yaya List::inset_node(int x,int y){ if(x<=0||x>count+1){ return error; } node*p=new node; p->data=y; node*current=head; for(int j=1;j<x;j++){ current=current->next; } p->next=current->next; current->next=p; count++; return success; } int List::delete_node(int i){ if(i<=0||i>count) return NULL; node*current=head; for(int j=1;j<i;j++){ current=current->next; }node*u=current->next; current->next=u->next; delete u; count--; return success; } void List::put_in(int x){ node*p=new node; p->data=x; node*current=head; for(;current!=NULL&&current->next!=NULL&&current->next->data<x;){ current=current->next; } p->next=current->next; current->next=p; count++; return; } void List::breaktwo(List& la,List& lb){ node*q=head->next; la.inset_node(la.count+1,q->data); while(q!=NULL&&q->next!=NULL&&q->next->next!=NULL){ q=q->next->next; la.inset_node(la.count+1,q->data); } node*w=head->next->next; lb.inset_node(lb.count+1,w->data); while(w!=NULL&&w->next!=NULL&&w->next->next!=NULL){ w=w->next->next; lb.inset_node(lb.count+1,w->data); } } void List::same_data(List&l1,List&l2,List&l){ node*p=l1.head; for(int i=1;i<=l1.count;i++){ p=p->next; node*q=l2.head; for(int j=1;j<=l2.count;j++){ q=q->next; if(p->data==q->data) l.inset_node(l.length()+1,p->data); } } } int List::out_data(){ node*p=head; for(int j=1;j<=count;j++){ p=p->next; cout<<(p->data)<<" "; } cout<<endl; return 0; } List::~List(){ node*p=head,*s; while(p!=NULL){ s=p; p=p->next; delete s; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值