#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define NUM 4
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
void CreateList(LNode *&L);//构建单链表
void DestoryList(LNode *&L);//销毁单链表
void SearchList(LNode *L,int x);//查找单链表中元素的位置
void InsertList(LNode *&L,int n,int x);//插入数据
void DeleteList(LNode *&L,int n);//删除数据
void PrintList(LNode *L);//打印单链表
int main()
{
LNode *L;
L=(LNode *)malloc(sizeof(LNode));//含有头结点的单链表
L->next=NULL;
printf("---建表-----\n");
CreateList(L);
PrintList(L);
printf("-----查找-----\n");
SearchList(L,4);
printf("-----在位置3插如一个节点10------\n");
InsertList(L,3,10);
PrintList(L);
printf("----删除第2个节点---\n");
DeleteList(L,2);
PrintList(L);
system("pause");
return 0;
}
void CreateList(LNode *&L)//尾插法构造单链表
{
LNode *p,*q;
q=L;
int i,x;
for(i=1;i<=NUM;i++)
{ printf("请输入数据:\n");
scanf("%d",&x);
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
p->next=NULL;
L->next=p;
L=p;
}
L->next=NULL;
L=q;
}
void PrintList(LNode *L)//打印链表
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
void SearchList(LNode *L,int x)//查找元素
{
LNode *p;
int i=1;
p=L->next;
while(p!=NULL)
{
if(p->data==x)//找到跳出循环,并打印位置
{
printf("%d的位置是%d\n",x,
i);
break;
}
i++;
p=p->next;
}
if(p==NULL)
printf("没有找到!\n");
}
void InsertList(LNode *&L,int n,int x)//插入节点
{
LNode *p,*q;
q=(LNode *)malloc(sizeof(LNode));
int i=1;
p=L->next;
while(p&&(i++)<n-1)//找到第n-1个节点,将p指向他
p=p->next;
q->data=x;
q->next=p->next;
p->next=q;
}
void DeleteList(LNode *&L,int n)//删除节点
{
LNode *p,*q ;
int i=1;
p=L->next;
while(p&&(i++)<n-1)//找到第n-1个节点,将p指向他
p=p->next;
q=p->next;
p->next=q->next;
free(q);
}
#include"stdlib.h"
#include"string.h"
#define NUM 4
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
void CreateList(LNode *&L);//构建单链表
void DestoryList(LNode *&L);//销毁单链表
void SearchList(LNode *L,int x);//查找单链表中元素的位置
void InsertList(LNode *&L,int n,int x);//插入数据
void DeleteList(LNode *&L,int n);//删除数据
void PrintList(LNode *L);//打印单链表
int main()
{
LNode *L;
L=(LNode *)malloc(sizeof(LNode));//含有头结点的单链表
L->next=NULL;
printf("---建表-----\n");
CreateList(L);
PrintList(L);
printf("-----查找-----\n");
SearchList(L,4);
printf("-----在位置3插如一个节点10------\n");
InsertList(L,3,10);
PrintList(L);
printf("----删除第2个节点---\n");
DeleteList(L,2);
PrintList(L);
system("pause");
return 0;
}
void CreateList(LNode *&L)//尾插法构造单链表
{
LNode *p,*q;
q=L;
int i,x;
for(i=1;i<=NUM;i++)
{ printf("请输入数据:\n");
scanf("%d",&x);
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
p->next=NULL;
L->next=p;
L=p;
}
L->next=NULL;
L=q;
}
void PrintList(LNode *L)//打印链表
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
void SearchList(LNode *L,int x)//查找元素
{
LNode *p;
int i=1;
p=L->next;
while(p!=NULL)
{
if(p->data==x)//找到跳出循环,并打印位置
{
printf("%d的位置是%d\n",x,
i);
break;
}
i++;
p=p->next;
}
if(p==NULL)
printf("没有找到!\n");
}
void InsertList(LNode *&L,int n,int x)//插入节点
{
LNode *p,*q;
q=(LNode *)malloc(sizeof(LNode));
int i=1;
p=L->next;
while(p&&(i++)<n-1)//找到第n-1个节点,将p指向他
p=p->next;
q->data=x;
q->next=p->next;
p->next=q;
}
void DeleteList(LNode *&L,int n)//删除节点
{
LNode *p,*q ;
int i=1;
p=L->next;
while(p&&(i++)<n-1)//找到第n-1个节点,将p指向他
p=p->next;
q=p->next;
p->next=q->next;
free(q);
}