| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:[分享]简单的链表操作
只看楼主 加入收藏
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
 问题点数:0 回复次数:3 
[分享]简单的链表操作

我刚学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 14:04
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
我在写的时候发现当输入元素时用scanf("%c",&amp;ch);会出错,而用ch=getchar();就好使了.是怎么回事呢?

[此贴子已经被作者于2006-2-4 18:02:13编辑过]



when i want to ask anyone,i will ask myself first.
2006-02-04 14:07
plus
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-1-18
收藏
得分:0 
scanf("%c", &ch);
2006-02-04 15:45
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
我不是那个意思,那是我打错了的.

when i want to ask anyone,i will ask myself first.
2006-02-04 18:01
快速回复:[分享]简单的链表操作
数据加载中...
 
   



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

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