#include<stdio.h>
#include<stdlib.h>
//带头结点的单链表
//定义结构体
typedef struct node{
int date;
struct node *next;
}lnode,*list;
//输出
void printf_list(list &l){
lnode *p;
p=l->next;
while(p!=NULL)
{
printf("%d,",p->date);
p=p->next;
}
printf("\n");
}
//尾插建立链表
list list_tail(list &l)
{
int x;
l=(lnode *)malloc(sizeof(lnode));
lnode *r,*s;
r=l;
scanf("%d",&x);
while(x!=9999)
{
s=(lnode *)malloc(sizeof(lnode));
s->date=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return l;
}
//头插建立链表
list list_head(list &l)
{
l=(lnode *)malloc(sizeof(lnode));
l->next=NULL;
lnode *s;
int x;
scanf("%d",&x);
while(x!=9999)
{
s=(lnode *)malloc(sizeof(lnode));
s->date=x;
s->next=l->next;
l->next=s;
scanf("%d",&x);
}
return l;
}
//判断是否为空
bool check_null(list &l)
{
if(l->next==NULL)
return true;
return false;
}
//按位序插入
bool insert_index(list &l,int i,int e)
{
if(i<1)
return false;
lnode *p;
p=l;
int j=0;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL) return false;
lnode *s=(lnode *)malloc(sizeof(lnode));
s->date=e;
s->next=p->next;
p->next=s;
return true;
}
//前插操作:在p结点之前插入元素e
bool insert_prior(lnode *p, int e)
{
if(p==NULL)
return false;
lnode *s = (lnode *)malloc(sizeof(lnode));
if(s == NULL)
return false;
s->next = p->next;
p->next = s;//新结点s连接到p之后
s->date = p->date;//将p中的元素复制到s中
p->date = e;//p中元素被e覆盖
return true;
}
//按位序查找
lnode * find_index(list &l,int pos){
if(pos<1)
return NULL;
if(pos<1)
return NULL;
int j = 1;
lnode *p = l->next;//第一个结点指针赋给p,表示p指向第一个结点
while(p != NULL && j<pos)
{
p = p->next;
j++;
}
return p;
}
//按位序删除
bool list_del(list &l, int i, int &e)
{
if (i < 1) return false;
lnode *p = l;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}//查找要删除的前一个节点
if (p == NULL)
return false;
if (p->next == NULL)
return false; //p是i的前一个结点,如果p->next == NULL,
//则说明位置i的结构体为NULL,这样就不要删除
lnode* q = p->next;
e = q->date; //用e返回元素的值
p->next = q->next; //将*q结点从链中断开
free(q); //释放结点的存储空间
return true;
}
//删除指定结点
//如果p是指向链表最后一个结点,则此时就会出现错误,
//若是想删除指定p结点,则只能从表头往后寻找p的直接前驱
bool list_orderdel(lnode *p)
{
if(NULL == p)
return false;
lnode *q = p->next;
p->date = p->next->date;
p->next = q->next;
free(q);
return true;
}
int main()
{
list l;
int e;
l=list_head(l);
printf("头插法:");
printf_list(l);
printf("按位序插入:");
insert_index(l,1,100);
printf_list(l);
lnode *p=find_index(l,2);
printf("按位序查找:");
printf("%d",p->date);
printf_list(l);
}
因篇幅问题不能全部显示,请点此查看更多更全内容