单链表操作

创建,查询,插入,删除。

  1 #include<stdlib.h>
  2 #include<iostream>
  3 using namespace std;
  4 typedef struct LNode{
  5     int data;
  6     struct LNode *next;
  7 }*List;
  8 
  9 void CreatList(List L,int n){//尾插法新建一个单链表 
 10     int v;
 11     List p,e;
 12     L->next=NULL;
 13     e=L;
 14     while(n>0){
 15         p=(LNode*)malloc(sizeof(LNode));
 16         cin>>v;
 17         p->data=v;
 18         p->next=e->next;
 19         e->next=p;
 20         e=e->next;
 21         --n; 
 22     }
 23 }
 24 int GetElem(List L,int n){//读取指定位置的元素 
 25     int *e;
 26     int i=1;
 27     List p;
 28     p=L->next;
 29     while(p!=NULL&&i<n){
 30         p=p->next;
 31         ++i;
 32     }
 33     if(!p||i>n) return 0;
 34     return p->data;
 35 } 
 36 int Insert(List L,int ins,int val){//在指定位置插入元素 
 37     List p,s; int i=0;
 38     p=L;
 39     while(p&&i<ins-1){
 40         p=p->next;
 41         ++i;
 42     }
 43     if(!p||i>ins) return 0;
 44     else{
 45         s=(LNode*)malloc(sizeof(LNode));
 46         s->data=val;
 47         s->next=p->next;
 48         p->next=s;
 49     }
 50     return 1;
 51 }
 52 
 53 int Delete(List L,int del){//删除指定位置的元素 
 54     List p=L;
 55     int i=0;
 56     while(p->next&&i<del-1){
 57         p=p->next;
 58         ++i;
 59     }
 60     //if(!p->next) return 0;
 61         List x;
 62         x=p->next;
 63         p->next=x->next;
 64         free(x);
 65         return 1;
 66 } 
 67 
 68 void Print(List L){//打印单链表 
 69     if(!L) cout<<"ERROR!"<<endl;
 70     else{
 71         List p=L->next;
 72         while(p){
 73             cout<<p->data<<" ";
 74             p=p->next;
 75         }
 76         cout<<endl;
 77     }
 78 } 
 79 
 80 int main(){
 81     int n,v;
 82     cout<<"请输入链表元素个数:";
 83     cin>>n;
 84     List L,s;
 85     //先给头节点一个空间,否则哪里来的链表 
 86     L=(LNode*)malloc(sizeof(LNode));
 87     
 88     //创建单链表 
 89     cout<<"请输入"<<n<<"个元素:"<<endl; 
 90     CreatList(L,n);
 91     /*List p; //头插法创建一个单链表 
 92     L->next=NULL;
 93     for(int i=n;i>0;i--){
 94         p=(LNode*)malloc(sizeof(LNode));
 95         cin>>v;
 96         p->data=v;
 97         p->next=L->next;
 98         L->next=p;
 99     }*/
100     Print(L);
101     
102     //读取单链表中某个值
103     cout<<"请输入想要读取的位置:";
104     int x; cin>>x; 
105     cout<<GetElem(L,x)<<endl;
106     
107     //在指定位置插入元素
108     cout<<"请输入想要插入的元素的位置和值:" ;
109     int ins,val;
110     cin>>ins>>val;
111     Insert(L,ins,val);
112     Print(L);
113     
114     //删除指定位置的元素
115     cout<<"请输入想要删除的元素的位置:";
116     int del;cin>>del;
117     Delete(L,del);
118     Print(L); 
119     
120     return 0;
121 }
//循环链表的创建:
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode{
    int data;
    struct LNode *next;
}*List;

void Creat(List L,int n){
    List p,rear;
    int v;
    L->next=L;
    rear=L;
    while(n!=0){
        p=(LNode*)malloc(sizeof(LNode));
        cin>>v;
        p->data=v;
        p->next=rear->next;
        rear->next=p;
        rear=p;
        --n;
    }
    cout<<rear->next->next->data<<endl;
}
void Print(List L){
    List p=L->next;
    while(p!=L){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<" ";
}

int main(){//循环链表
    List L;
    L=(LNode*)malloc(sizeof(LNode));
    int n; cin>>n;
    Creat(L,n);
    Print(L);
    return 0;
}
posted @ 2020-01-06 13:46  老葛  阅读(165)  评论(0编辑  收藏  举报