#include<stdio.h>
#include<malloc.h>
//#include<algorithm>
//using namespace std;
typedef struct linknode{
char data;
struct linknode *next;
}node,*linklist;
node *p;
node *head;
int n; //记录表长
void creat() //建表
{
char x;
node *s,*r;
head=(node*)malloc(sizeof(node));
r=head;
head->data='#';
//r->data='#';
printf("\t请输入链表元素(以字符#结束):");
while(scanf(" %c",&x),x!='#')
{
s=(node*)malloc(sizeof(node));
n++;
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
}
void print()
{
node *s,*r;
r=head;
printf("\t表中元素为:");
if(n==0)
{
printf("\t链表为空,请先输入元素!\n\n");
return ;
}
while(r->next!=NULL)
{
s=r->next;
printf("%c ",s->data);
r=s;
}
printf("\n\n");
}
void linklenth()
{
printf("\t表长为:%d\n\n",n);
}
void inslink() //插入
{
char m;
char x;
printf("\t请输入插入元素的位置:");
scanf(" %c",&m);
if(n==0)
{
printf("\t链表为空,指令无法进行!!!\n\n");
return ;
}
printf("\t请输入要插入的元素:");
scanf(" %c",&x);
node *s,*r,*y;
r=head;
while(r->next!=NULL)
{
s=r->next;
if(s->data==m)
break;
r=s;
}
if(s->data!=m)
{
printf("\t输入位置有误!请重新输入~\n\n");
return ;
}
y=(node*)malloc(sizeof(node));
y->data=x;
y->next=s->next;
s->next=y;
n++;
return ;
}
void dellink()
{
printf("\t请输入需要删除的元素:");
char m;
scanf(" %c",&m);
node *s,*r;
r=head;
if(n==0)
{
printf("\t链表为空,无法删除\n\n");
return ;
}
while(r->next!=NULL)
{
s=r->next;
if(s->data==m)
break;
r=s;
}
if(s->data!=m)
{
printf("\t要删除的元素不存在,请重新输入~\n\n");
return ;
}
r->next=s->next;
free(s);
n--;
return ;
}
void searchlink()
{
int i=0;
char x;
int num=0;
printf("\t请输入要查找的元素:");
scanf(" %c",&x);
node *s,*r;
r=head;
printf("\t要查找的元素位置为:");
if(n==0)
{
printf("\t链表为空,无法查找\n\n");
return ;
}
while(r->next!=NULL)
{
i++;
r=r->next;
if(r->data==x)
{
printf("%d ",i);
num++;
break;
}
}
if(num==0){
printf("查找失败,元素不存在");
}
printf("\n\n");
}
void clearlink()
{
node *s,*r;
r=head;
if(n==0)
return ;
while(r->next!=NULL)
{
s=r->next;
free(r);
r=s;
}
n=0;
}
int main ()
{
char m=1;
printf("\t\t\t----链表的程序实现----\n\n");
while(m!=0)
{
printf("\n\t\t******************************************\n");
printf("\t\t* 指令说明 *\n");
printf("\t\t* 1:建表 *\n");
printf("\t\t* 2:显示表 *\n");
printf("\t\t* 3:求表长 *\n");
printf("\t\t* 4:插入(后插) *\n");
printf("\t\t* 5:删除 *\n");
printf("\t\t* 6:按值查找 *\n");
printf("\t\t* 0:返回 *\n");
printf("\t\t******************************************\n\n");
printf("\t请输入指令:");
scanf(" %c",&m);
switch(m)
{
case '1':n=0;creat();break;
case '2':print();break;
case '3':linklenth();break;
case '4':inslink();break;
case '5':dellink();break;
case '6':searchlink();break;
case '0':clearlink();return 0;
default :printf("\t输入有误!请重新输入~\n\n");break;
}
}
return 0;
}
#include<malloc.h>
//#include<algorithm>
//using namespace std;
typedef struct linknode{
char data;
struct linknode *next;
}node,*linklist;
node *p;
node *head;
int n; //记录表长
void creat() //建表
{
char x;
node *s,*r;
head=(node*)malloc(sizeof(node));
r=head;
head->data='#';
//r->data='#';
printf("\t请输入链表元素(以字符#结束):");
while(scanf(" %c",&x),x!='#')
{
s=(node*)malloc(sizeof(node));
n++;
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
}
void print()
{
node *s,*r;
r=head;
printf("\t表中元素为:");
if(n==0)
{
printf("\t链表为空,请先输入元素!\n\n");
return ;
}
while(r->next!=NULL)
{
s=r->next;
printf("%c ",s->data);
r=s;
}
printf("\n\n");
}
void linklenth()
{
printf("\t表长为:%d\n\n",n);
}
void inslink() //插入
{
char m;
char x;
printf("\t请输入插入元素的位置:");
scanf(" %c",&m);
if(n==0)
{
printf("\t链表为空,指令无法进行!!!\n\n");
return ;
}
printf("\t请输入要插入的元素:");
scanf(" %c",&x);
node *s,*r,*y;
r=head;
while(r->next!=NULL)
{
s=r->next;
if(s->data==m)
break;
r=s;
}
if(s->data!=m)
{
printf("\t输入位置有误!请重新输入~\n\n");
return ;
}
y=(node*)malloc(sizeof(node));
y->data=x;
y->next=s->next;
s->next=y;
n++;
return ;
}
void dellink()
{
printf("\t请输入需要删除的元素:");
char m;
scanf(" %c",&m);
node *s,*r;
r=head;
if(n==0)
{
printf("\t链表为空,无法删除\n\n");
return ;
}
while(r->next!=NULL)
{
s=r->next;
if(s->data==m)
break;
r=s;
}
if(s->data!=m)
{
printf("\t要删除的元素不存在,请重新输入~\n\n");
return ;
}
r->next=s->next;
free(s);
n--;
return ;
}
void searchlink()
{
int i=0;
char x;
int num=0;
printf("\t请输入要查找的元素:");
scanf(" %c",&x);
node *s,*r;
r=head;
printf("\t要查找的元素位置为:");
if(n==0)
{
printf("\t链表为空,无法查找\n\n");
return ;
}
while(r->next!=NULL)
{
i++;
r=r->next;
if(r->data==x)
{
printf("%d ",i);
num++;
break;
}
}
if(num==0){
printf("查找失败,元素不存在");
}
printf("\n\n");
}
void clearlink()
{
node *s,*r;
r=head;
if(n==0)
return ;
while(r->next!=NULL)
{
s=r->next;
free(r);
r=s;
}
n=0;
}
int main ()
{
char m=1;
printf("\t\t\t----链表的程序实现----\n\n");
while(m!=0)
{
printf("\n\t\t******************************************\n");
printf("\t\t* 指令说明 *\n");
printf("\t\t* 1:建表 *\n");
printf("\t\t* 2:显示表 *\n");
printf("\t\t* 3:求表长 *\n");
printf("\t\t* 4:插入(后插) *\n");
printf("\t\t* 5:删除 *\n");
printf("\t\t* 6:按值查找 *\n");
printf("\t\t* 0:返回 *\n");
printf("\t\t******************************************\n\n");
printf("\t请输入指令:");
scanf(" %c",&m);
switch(m)
{
case '1':n=0;creat();break;
case '2':print();break;
case '3':linklenth();break;
case '4':inslink();break;
case '5':dellink();break;
case '6':searchlink();break;
case '0':clearlink();return 0;
default :printf("\t输入有误!请重新输入~\n\n");break;
}
}
return 0;
}