创建,查询,插入,删除。
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;
}