1.单链表的创建(头插法、尾插法),插入、删除结点,链表的逆置、排序
#include
#include
/*创建链表结构体*/
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*尾插法创建链表*/
void create_tail(LinkList L)
{
LNode *r,*s;
int n,flag=1;
r=L;
while(flag)
{
scanf("%d",&n);
if(n>0)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=n;
r->next=s;
r=s;
}
else
flag=0;
}
r->next=NULL;
}
/*头插法创建链表*/
void create_head(LinkList L)
{
LNode *r,*s;
int n,flag=1;
r=L;
while(flag)
{
scanf("%d",&n);
if(n>0)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=n;
s->next=r->next;
r->next=s;
}
else
flag=0;
}
}
/*插入结点*/
void list_insert(LinkList L,int i,int e)
{
LNode *p=L,*s;
int j=0;
while(p!=NULL&&j
{
p=p->next;
j++;
}
if(p!=NULL)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
printf("insert is OK!\n");
}
else
printf("insert is wrong!\n");
}
/*删除结点*/
void list_delete(LinkList L,int i)
{
LNode *p=L,*s;
int j=0,e;
while(p!=NULL&&j
{
p=p->next;
j++;
}
if(p!=NULL)
{
s=p->next;
e=s->data;
p->next=p->next->next;
free(s);
printf("delete is OK!\n");
}
else
printf("delete is wrong!\n");
}
/*链表的逆置*/
void list_reverse(LinkList L)
{
LNode *p,*q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
/*链表的排序(冒泡法)*/
void list_sort(LinkList L)
{
LNode *p,*q,*small;
int temp;
for(p=L->next;p->next!=NULL;p=p->next)
{
small=p;
for(q=p->next;q;q=q->next)
if(q->datadata)
small=q;
if(small!=p)
{
temp=p->data;
p->data=small->data;
small->data=temp;
}
}
}
/*主函数*/
int main()
{
LinkList L;
LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
create_tail(L);
// create_head(L);
// list_insert(L,3,9);
// list_delist_reverse(L);
// list_reverse(L);
p=L;
printf("output LinkList:\n");
while(p->next!=NULL)
{
p=p->next;
printf("%d\n",p->data);
}
return 0;
}
2.单链表的求长度、查找
(*注:头文件、链表结构体定义、链表创建和第一题相同,故省略)
/*查找某个元素*/
LNode * locate(LinkList L,int k)
{
LNode *p=L->next;
while(p!=NULL)
{
if(p->data!=k)
p=p->next;
else
break;
}
return p;
}
/*求链表长度*/
int list_length(LinkList L)
{
LNode *p;
p=L->next;
int j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
/*主函数*/
int main()
{
LinkList L;
LNode *p;
int n;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
creat_tail(L);
n=list_length(L);
printf("length=%d\n",n);
p=locate(L,4);
if(p!=NULL)
{
printf("number is find:");
printf("%d\n",p->data);
}
else
printf("number isn't find!\n");
return 0;
}
阅读(848) | 评论(0) | 转发(0) |