[C++] 单链表的基本运算 →→→→→进入此内容的聊天室

来自 , 2020-08-11, 写在 C++, 查看 101 次.
URL http://www.code666.cn/view/06964dce
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. typedef char ElemType;
  6. typedef int Status;
  7. typedef struct LNode
  8. {
  9.     ElemType data;
  10.     struct LNode *next;
  11. }LNode,*LinkList;
  12. Status InitList(LinkList &L)//初始化链表
  13. {
  14.     L=new LNode;
  15.     L->next=NULL;
  16.     cout<<L->next<<endl;
  17.     return 1;
  18. }
  19. Status ListCreate_L(LinkList &L,int n)//尾插法插入元素
  20. {
  21.     LNode *rearPtr,*curPtr;   //一个尾指针,一个指向新节点的指针
  22.     rearPtr=L;  //初始时头结点为尾节点,rearPtr指向尾巴节点
  23.     for (int i=1;i<=n;i++){  //每次循环都开辟一个新节点,并把新节点拼到尾节点后
  24.         curPtr=new LNode;//生成新结点
  25.         cin>>curPtr->data;//输入元素值
  26.         curPtr->next=NULL;  //最后一个节点的next赋空
  27.         rearPtr->next=curPtr;
  28.         rearPtr=curPtr;
  29.     }
  30.     return 1;
  31. }
  32. void ListPrint_L(LinkList &L)//输出单链表
  33. {
  34.     LNode *p=L->next;  //p指向第一个元素结点
  35.     while(p)
  36.     {
  37.           if(p->next!=NULL)
  38.                cout<<p->data<<" ";
  39.           else
  40.                cout<<p->data;
  41.           p=p->next;
  42.     }
  43.     cout<<endl;
  44. }
  45. void ListLength_L(LinkList &L)//长度
  46. {
  47.     int len=0;
  48.     LNode *p=L->next;
  49.     while(p)
  50.     {
  51.         len++;
  52.         p=p->next;
  53.     }
  54.     cout<<len<<endl;
  55. }
  56. void EmptyList_L(LinkList &L)//判断单链表是否为空
  57. {
  58.     LNode *p =L->next;
  59.     if(p)
  60.         cout<<"no"<<endl;
  61.     else
  62.         cout<<"yes"<<endl;
  63. }
  64. void GetElem(LinkList &L,int a)//单链表取值
  65. {
  66.     LNode *p=L->next;
  67.     int j=1;
  68.     while(p&&j<a)
  69.     {
  70.         p=p->next;
  71.         j++;
  72.     }
  73.     cout<<p->data<<endl;
  74. }
  75. void GetAdr(LinkList &L,ElemType c)//找元素的位置
  76. {
  77.     LNode *p=L->next;
  78.     int i=1;
  79.     while(p)
  80.     {
  81.        if(p->data==c)
  82.        {
  83.            cout<<i<<endl;
  84.            break;
  85.        }
  86.        else
  87.        {
  88.            i++;
  89.            p=p->next;
  90.        }
  91.     }
  92. }
  93. void ListInsert(LinkList &L,int i,ElemType e)//插入一结点
  94. {
  95.     LNode *p=L->next;
  96.     int j=1;
  97.     while(p&&(j<i-1))
  98.     {
  99.         p=p->next;
  100.         j++;
  101.     }
  102.     LNode *s;
  103.     s=new LNode;
  104.     s->data=e;
  105.     s->next=p->next;
  106.     p->next=s;
  107. }
  108. void ListDelete(LinkList &L,int i)//删除某一结点
  109. {
  110.     LNode *p=L->next,*q;
  111.     int j=1;
  112.     while((p->next)&&(j<i-1))
  113.     {
  114.         p=p->next;
  115.         j++;
  116.     }
  117.     q=p->next;
  118.     p->next=q->next;
  119.     delete q;
  120. }
  121. void  ListClear(LinkList &L)//释放链表
  122. {
  123.     LNode *p;
  124.     while(L->next)
  125.     {
  126.         p=L->next;
  127.         L->next=p->next;
  128.         delete p;
  129.     }
  130. }
  131. int main()
  132. {
  133.     LinkList L;
  134.     InitList(L);
  135.     int n;
  136.     cin>>n;
  137.     ListCreate_L(L,n);
  138.     ListPrint_L(L);
  139.     ListLength_L(L);
  140.     EmptyList_L(L);
  141.     GetElem(L,3);
  142.     GetAdr(L,'a');
  143.     ListInsert(L,4,'x');
  144.     ListPrint_L(L);
  145.     ListDelete(L,3);
  146.     ListPrint_L(L);
  147.     ListClear(L);
  148.     return 0;
  149. }
  150.  

回复 "单链表的基本运算"

这儿你可以回复上面这条便签

captcha