| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖, 2 人收藏
标题:[分享]简单的链表操作
只看楼主 加入收藏
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏(2)
 问题点数:0 回复次数:5 
[分享]简单的链表操作
我刚学C不久,看到链表这就写了这个.给刚学C的朋友们,希望大家共同进步,也希望高手们也看看提出缺点和不足.
谢谢!
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
////////链表结构体////////
struct chain
{
char data;
struct chain *next;
};
////////声明////////
int Menu();
struct chain *Create(void);
struct chain *Insert(struct chain *head);
struct chain *Del(struct chain *head);
void Free(struct chain *head);
void print(struct chain *head);
////////主函数////////
void main()
{
struct chain *top;
for (; ;)
{
switch (Menu())
{
case 1:
top=Create();
print(top);
printf("\n");
break;
case 2:
top=Insert(top);
print(top);
printf("\n");
break;
case 3:
top=Del(top);
print(top);
printf("\n");
break;
case 4:
Free(top);
exit(0);
}
}
}
////////菜单函数////////
int Menu()
{
char s;
int num;
printf("1.建立链表\n");
printf("2.插入元素\n");
printf("3.删除元素\n");
printf("4.退出\n");
do
{
s=getchar();
num=(int)s-48;
}while (num<0 || num>4);
return num;
}
////////建立链表////////
struct chain *Create(void)
{
struct chain *head,*tail,*p;
head=tail=NULL;
char ch;
printf("输入链表元素:");
getchar();
while ((ch=getchar())!='\n')
{
p=(struct chain *)malloc (sizeof(struct chain));
p->data=ch;
p->next=NULL;
if (head==NULL)
{
head=tail=p;
}
else
{
tail=tail->next=p;
}
}
return head;
}
////////插入函数////////
struct chain *Insert(struct chain *head)
{
struct chain *p,*q,*insert;
char c,d;
printf("输入插入元素位于之前数据:");
getchar();
c=getchar();
printf("输入插入元素:");
getchar();
d=getchar();
insert=(struct chain *)malloc (sizeof(struct chain));
insert->data=d;
if (head==NULL)
{
head=insert;
insert->next=NULL;
}
if (head->data==c)
{
insert->next=head;
head=insert;
}
else
{
p=head;
while ((p->data!=c) && (p->next!=NULL))
{
q=p;
p=p->next;
}
if (p->data==c)
{
q->next=insert;
insert->next=p;
}
else
{
p->next=insert;
insert->next=NULL;
}
}
return (head);
}
////////删除函数////////
struct chain *Del(struct chain *head)
{
struct chain *p=NULL,*q=NULL;
char del;
printf("输入要删除的数据:");
getchar();
del=getchar();
if (head==NULL)
{
printf("空链表\n");
}
else if (head->data==del)
{
p=head;
head=head->next;
}
else
{
p=head;
while ((p->data!=del) && (p->next!=NULL))
{
q=p;
p=p->next;
}
if (p->data !=del)
{
printf("没有要删除的数据");
}
else
{
q->next=p->next;
free(p);
}
}
return (head);
}
////////输出函数////////
void print(struct chain *head)
{
while (head!=NULL)
{
printf("%c",head->data);
head=head->next;
}
}
////////释放内存////////
void Free(struct chain *head)
{
struct chain *p,*q;
p=head;
while (p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}
搜索更多相关主题的帖子: 链表 分享 
2006-02-04 18:19
high20033763
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-2-13
收藏
得分:0 
不错
2006-02-16 20:01
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 

when i want to ask anyone,i will ask myself first.
2006-02-18 17:56
hy99303
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-3-11
收藏
得分:0 
呵呵,刚学的不错,只是程序写的太过繁琐,还待加油!
2006-03-11 14:50
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
看样子你把单琏表这一章学的不错啊!继续努力啊!呵呵!

♂ 死后定当长眠,生前何须久睡。♀
2006-03-12 22:57
cocogin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-12
收藏
得分:0 

刚好新学到这,谢了


为了某人而存在的这一瞬间 就算是将其当成我生命的全部也无怨无悔
2006-03-13 13:28
快速回复:[分享]简单的链表操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042843 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved