数据结构之链表各功能的实现
来源:互联网 发布:屏幕录制软件ios 编辑:程序博客网 时间:2024/06/01 08:19
#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;
}
阅读全文
0 0
- 数据结构之链表各功能的实现
- 数据结构--线性表的所有功能实现
- 数据结构,循环队列各功能的实现
- 数据结构之单链表的实现
- 数据结构之单链表的实现
- 数据结构之左式堆的实现
- 数据结构之栈的实现
- 数据结构之哈希表的实现
- 数据结构之队列的实现
- 数据结构之四叉树的实现
- 数据结构之单链表的实现
- 数据结构之栈的实现
- 数据结构之队列的实现
- 数据结构之栈的实现
- 数据结构之堆的实现
- 数据结构之图的实现
- 数据结构之 队列的实现!
- 数据结构之HashMap的实现
- webservice客户端(使用java代码调用服务端)
- 一直在用的签名文件签名后提示[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
- C++第五次实验数组1项目3
- 知识总结 插件化学习 Activity加载分析
- Java基础知识 一 对象与类
- 数据结构之链表各功能的实现
- IMX6之Openwrt系统USB无线网卡RT3072配置记录
- tensorflow 语法及 api 使用细节
- zip 文件格式分析: 附实例介绍
- mfc 学习笔记
- linux线程学习(6)
- HTML-Emmet(神器)
- IMX6之openwrt设置samba共享
- CMake入门编程(1)