对线性链表的基本操作
#include <stdio.h>
#include <stdlib.h>
typedef char DateType;
typedef struct node
{
DateType data;
struct node* next;
}LinkList;
LinkList* head;
void InitLinkList()
{
int j;
DateType x;
LinkList *p,*s;
head=(LinkList*)malloc(sizeof(LinkList));
p=head;
head->next=NULL;
printf("\n\t\t\t请输入链表元素,输入'#'结束,格式如(x):\n");
while(j)
{
printf("\t\t\t");
scanf("%c",&x);
if(x!='#')
{
s=(LinkList*)malloc(sizeof(LinkList));
s->next=p->next;
p->next=s;
s->data=x;
scanf("%c",&x);
}
else
{
j=0;
}
}
}
void InsertLinkList(LinkList* L,int i,DateType x)
{
int j=0;
LinkList* s;
L=head;
while(j<i-1 && L!=NULL)
{
L=L->next;
j++;
}
if(L==NULL||i<1)
{
printf("\n\t\t\t插入位置不合法!");
}
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->next=L->next;
L->next=s;
s->data=x;
printf("\n\t\t\t插入元素成功!");
}
}
void DeleteLinkList(LinkList* L,int i)
{
int j=0;
LinkList* s;
L=head;
while(j<i-1 && L->next!=NULL)
{
j++;
L=L->next;
}
if(L->next==NULL||i<1)
{
printf("\n\t\t\t输出位置不合法!");
}
else
{
s=L->next;
L->next=s->next;
free(s);
printf("\n\t\t\t删除成功!");
}
}
void getformLinkList(LinkList* L,int i)
{
int j;
L=head;
for(j=1;j<=i;j++)
{
if(L!=NULL)
{
L=L->next;
}
else
{
printf("\n\t\t\t查找位置不合法!");break;
}
}
printf("\n\t\t\t第%d个元素为:%c",i,L->data);
}
void searchLinkList(LinkList* L,DateType x)
{
int j=1;
L=head->next;
while(L->data!=x&&L!=NULL)
{
L=L->next;
j++;
}
printf("\n\t\t\t你要元素%c的位置为:%d",x,j);
}
void lenLinkList(LinkList* L)
{
int j=0;
L=head->next;
while(L!=NULL)
{
L=L->next;
j++;
}
printf("\n\t\t\t链表的长度为:%d",j);
}
void showLinkList(LinkList* L)
{
L=head->next;
if(L==NULL)
{
printf("\n\t\t\t链表为空!");
}
else
{
printf("\n\t\t\t链表元素为:\n");
printf("\t\t\t");
for(L;L!=NULL;L=L->next)
{
printf("%c\t",*L);
}
}
}
void main()
{
int j,k,i;
DateType x;
LinkList L;
while(j)
{
printf("\n\n\n\n");
printf("\n\t\t\t************************************");
printf("\n\t\t\t*** 1---初始化链表 ***");
printf("\n\t\t\t*** 2---插入元素 ***");
printf("\n\t\t\t*** 3---删除元素 ***");
printf("\n\t\t\t*** 4---按序号查找元素 ***");
printf("\n\t\t\t*** 5---按值查找元素 ***");
printf("\n\t\t\t*** 6---链表长度 ***");
printf("\n\t\t\t*** 7---显示线性链表 ***");
printf("\n\t\t\t*** 0---退出 ***");
printf("\n\t\t\t************************************\n");
printf("\n\t\t\t请选择一个菜单号(0---7):");
scanf("%d",&k);getchar();
if(k==1)
{
InitLinkList();
}
else if(k==2)
{
printf("\n\t\t\t请输入插入的序号与元素,格式如(i,x):");
scanf("%d,%c",&i,&x);
InsertLinkList(&L,i,x);
}
else if(k==3)
{
printf("\n\t\t\t请输入要删除元素的序号,格式如(i):");
scanf("%d",&i);
DeleteLinkList(&L,i);
}
else if(k==4)
{
printf("\n\t\t\t请输入要查找元素的序号,格式如(i):");
scanf("%d",&i);
getformLinkList(&L,i);
}
else if(k==5)
{
printf("\n\t\t\t请输入要查找的元素,格式如(x):");
scanf("%c",&x);
searchLinkList(&L,x);
}
else if(k==6)
{
lenLinkList(&L);
}
else if(k==7)
{
showLinkList(&L);
}
else if(k==0)
{
j=0;
printf("\n\t\t\t程序结束!\n");
}
}
}