链表(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; }