构建链表后基本的一些操作
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define MaxSize 10
using namespace std;
typedef struct node
{
int data;
struct node *next;
} Node,*LinkList;
LinkList Createlist()//构建先进后出链表;
{
LinkList L,p;
int n;
printf("please input n:\n");
cin>>n;
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
printf("please input the number of n number:\n");
for(int i=n; i>0; i--)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
return L;
}
void nizhi(LinkList H)//将链表逆置
{
LinkList L=H;
LinkList p,q;
p=L->next;
L->next=NULL;
while(p)
{
q=p;
p=p->next;
q->next=L->next;
L->next =q;
}
}
void put(LinkList H)//输出链表里的值
{
LinkList L=H;
LinkList q;
while(L->next!=NULL)
{
L=L->next;
q=L;
printf("%d ",q->data);
}
cout<<endl;
}
void freelist(LinkList H)//释放链表空间
{
LinkList L=H;
LinkList q;
while(L!=NULL)
{
q=L;
L=L->next;
free(q);
}
}
void insertEle(LinkList H)//在第n个元素后面插入值c
{
LinkList L=H,q;
printf("please input weizhi and shuzhi:\n");
int n,c;
cin>>n>>c;
for(int i=0;i<n;i++)
L=L->next;
q=(LinkList)malloc(sizeof(Node));
q->data=c;
q->next=L->next;
L->next=q;
}
void deleteEle(LinkList H)//删除元素
{
LinkList L=H,q,p;
printf("please input weizhi:\n");
int n;
cin>>n;
for(int i=1;i<n;i++)
L=L->next;
q=L->next;
p=q->next;
free(q);
L->next=p;
}
void sort1(LinkList H)//仅仅交换值的排序
{
LinkList L=H,p,q;
p=L->next;
int j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
for(int i=0;i<j;i++)
{
q=L->next;
for(int k=i;k<j-1;k++)
{
p=q;
q=p->next;
if(p->data > q->data)
{
int tmp;
tmp=p->data;
p->data=q->data;
q->data=tmp;
}
}
}
}
void sort2(LinkList H)//交换链表区域的排序
{
LinkList L=H,p,q,r;
r=L;
p=L->next;
int j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
for(int i=0;i<j;i++)
{
r=L;
q=L->next;
for(int k=i;k<j-1;k++)
{
p=q;
q=p->next;
if(p->data > q->data)
{
p->next=q->next;
q->next=p;
r->next=q;
}
r=p;
}
}
}
int main()
{
LinkList head;
head=Createlist();
put(head);
nizhi(head);
put(head);
insertEle(head);
put(head);
deleteEle(head);
put(head);
sort1(head);
put(head);
sort2(head);
put(head);
freelist(head);
return 0;
}