单链表:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct LNode{
int data;
struct LNode *next;
}Node;
void CreatList(Node *L,int n){//创建链表(尾插法)
Node *s,*r;
r = L;//尾节点
for(int i=0;i<n;i++){
s = (Node*)malloc(sizeof(Node));//新节点存取数据
scanf("%d",&s->data);
r->next = s;
r = s;
}
r->next = NULL;
}
void CreatList_tou(Node *L,int n){//创建链表(头插法)
L->next=NULL;
Node *s;
for(int i=0;i<n;i++){
s = (Node*)malloc(sizeof(Node));//新节点存取数据
scanf("%d",&s->data);
s->next = L->next;
L->next = s;
}
}
void OutputList(Node *L){//输出链表
Node *p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
}
void Insert(Node *L,int x){//后插操作(判断大小)
Node *p,*s;
p = L;
s = (Node*)malloc(sizeof(Node));
s->data = x;
int flag = 0;
while(p->next){
if(p->next->data>=s->data){
s->next = p->next;
p->next = s;
flag = 1;
break;
}
else{
p = p->next;
}
}
if(flag ==0){
p->next = s;
s->next = NULL;
}
}
int main()
{
int n,x;
scanf("%d",&n);
Node *L;
L = (Node*)malloc(sizeof(Node));
CreatList(L,n);
scanf("%d",&x);
Insert(L,x);
OutputList(L);
return 0;
}
双链表:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct DNode{
int data;
DNode *prior,*next;
}DNode;
void CreateList(DNode *L,int n){
DNode *s,*p;
p = L;
for(int i=0;i<n;i++){
s = (DNode*)malloc(sizeof(DNode));
scanf("%d",&s->data);
p->next = s;
s->prior = p;
p = s;
}
p->next = NULL;
}
void OutputList(DNode *L){
DNode *s;
s = L->next;
while(s){
printf("%d ",s->data);
s = s->next;
}
}
void Insert(DNode *L,int x){//插入
DNode *s,*p;
p = L;
s = (DNode*)malloc(sizeof(DNode));
s->data = x;
int flag = 0;
while(p->next){
if(p->next->data>=s->data){
s->next = p->next;
if(s->next!=NULL)//防止s后是空
p->next->prior = s;
s->prior = p;
p->next = s;
flag = 1;
break;
}
else
p = p->next;
}
if(flag == 0){
s->next = p->next;
s->prior = p;
p->next = s;
}
}
void Delect(DNode *L,int x){//删除
DNode *s,*p;
p = L;
int flag = 0;
while(p->next){
if(p->next->data==x){
s = (DNode*)malloc(sizeof(DNode));
s = p->next;
p->next = s->next;
if(s->next!=NULL)//防止s后是空
s->next->prior = p;
free(s);//释放
break;
}
else
p = p->next;
}
}
int main(int argc, char** argv) {
DNode *L;
L = (DNode*)malloc(sizeof(DNode));
int n,x;
scanf("%d",&n);
CreateList(L,n);
cin >> x;
Insert(L,x);
Delect(L,x);
OutputList(L);
return 0;
}