数据结构--链表

链表(linked list)——顺序表的一种  逻辑上是连续的但物理上再内存中并不是连续的

在堆中动态分配空间 

c --malloc申请空间,free回收

c++--new申请空间,dalete回收(new不仅分配内存还创建了对象)

#include<iostream>
using namespace std;
struct node{
    int data;
    node * next;
};
int n;
//n=new int ;
node* creat(int *arr)//带头节点的链表 
{
    node* p ,*head,*pre;
    head=new node;
    head->next=NULL; 
    pre=head;
    for(int i=0;i<n;i++)
    {
        p=new node;
        p->data =arr[i];
        p->next=NULL;
        pre->next=p;
        pre=p;
    }
    return head;
}
//在以head为头结点的链表上计数元素x的个数
int search(node* head,int x){
    int count=0;
    node *p=head->next;
    while(p!=NULL){
        if(p->data==x) count++;
        p=p->next;
    }
    return count;
}
//将x插入以head为头结点的链表的第pos个位置上
void insert(node* head,int pos,int x){
    node* p=head;
    for(int i=0;i<pos-1;i++){
        p=p->next;
    }
    node* q=new node;
    q->data=x;
    q->next=p->next;
    p->next=q;
}
//删除以head为头结点的链表中所有数据域为x的结点
void del(node* head,int x){
    node* p=head->next;
    node* pre=head;
    while(p!=NULL){
        if(p->data==x){
            pre->next=p->next;
            delete(p);
            p=pre->next;
        }else{
            pre=p;
            p=p->next;
        }
    }
}
int main()
{
    cin>>n;
    int *arr=new int[n];
    for(int i=0;i<n;i++)
    cin>>arr[i];
    node* r=creat(arr);
    while(r!=NULL)
    {
        cout<<r->data<<" ";
        r=r->next;
    }
    return 0;
}
    

 

posted @ 2019-07-15 15:35  流照君  阅读(207)  评论(0编辑  收藏  举报