C语言----链表及其应用
2012-09-16 17:26
288 查看
本部分是C语言的最后一部分,因为教研室的一些工作,导致了我的进度滞后,在此对自己提出批评。
1、链表的定义:特点:按需分配存储单元,物理地址不连续 单向链表分为 队列 和 堆栈
2、链表的插入和删除;
====================================================================================
习题训练:
1、设计一个程序,将十进制转化为任何进制数;
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
int a;
};
struct obj *createlink(int x)
{
struct obj *p,*head;
int m,n;
head=NULL;
printf("请输入要转换的进制: ");
scanf("%d",&n);
while(x){
m=x%n;
p=(struct obj *)malloc(sizeof(struct obj)); //申请一个链表p,p的a部分赋值为m,p 的头部分为head。。
p->a=m;
p->link=head;
head=p;
x=x/n;
}
return (head);
}
int outlink(struct obj *p)
{
while(p){
printf("%d",p->a);
p=p->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
int num;
printf("请输入一个数:");
scanf("%d",&num);
head = createlink(num);
outlink(head);
return 0;
}
//思想:将要转换的数x除以要转换的进制,取余数放入链表,动态申请,商进行循环。。。
2、建立一个链表,从键盘上输入字符,输入字符为'0'时停止,然后反序输出。
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
char ch;
};
struct obj *createlink()
{
struct obj *p,*head;
char c;
head=NULL;
while((c=getchar())!='0')
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
p->ch=c;
p->link=head;
head=p;
}
return head;
}
int outlink(struct obj *p)
{
while(p){
printf("%c",p->ch);
p=p->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
printf("请输入一个字符,以0结束:");
head = createlink();
outlink(head);
return 0;
}
//与上题写函数的方法相似,先写一个创建链表的函数,在创建的过程中,就按照要求对链表里面内容进行赋值,然后写一个打印链表的函数。这里涉及到了单向链表 堆栈的存储结构,特点是先进后出。先存入的元素最后打印,这样就实现了题目中要求的倒序的要求。
3、用链表的方式,输入若干书的书名和单价,输入的单价为‘0’时停止输入,然后按单价进行排序后输出。
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
char bookname[40];
int price;
};
struct obj *createlink()
{
struct obj *p,*head;
char name[40];
int pr;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
head=NULL;
while(pr!=0)
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
strcpy(p->bookname,name);
p->price=pr;
p->link=head;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
}
return (head);
}
int outlink(struct obj *p)
{
struct obj *head,*q;
int tt;
char aa[40];
head=p;
while(p!=NULL){
q=p->link;
while(q!=NULL){
if((p->price)>(q->price)){
strcpy(aa,(q->bookname));
tt=q->price;
strcpy((q->bookname),(p->bookname));
q->price=p->price;
strcpy((p->bookname),aa);
p->price=tt;
}
q=q->link;
}
p=p->link;
}
while(head){
printf("%s",head->bookname);
printf(" %d",head->price);
head=head->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
head = createlink();
outlink(head);
return 0;
}
4、编写函数creat,用来建立一个单链表,新产生的结点总在链表的末尾,单链表的头指针作为函数值返回。
struct obj *createlink()
{
struct obj *p,*head,*q;
char name[40];
int pr;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
head=NULL;
while(pr!=0)
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
strcpy(p->bookname,name);
p->price=pr;
p->link=head;
q->link=p;
q=p;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
}
return (head);
}
1、链表的定义:特点:按需分配存储单元,物理地址不连续 单向链表分为 队列 和 堆栈
2、链表的插入和删除;
====================================================================================
习题训练:
1、设计一个程序,将十进制转化为任何进制数;
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
int a;
};
struct obj *createlink(int x)
{
struct obj *p,*head;
int m,n;
head=NULL;
printf("请输入要转换的进制: ");
scanf("%d",&n);
while(x){
m=x%n;
p=(struct obj *)malloc(sizeof(struct obj)); //申请一个链表p,p的a部分赋值为m,p 的头部分为head。。
p->a=m;
p->link=head;
head=p;
x=x/n;
}
return (head);
}
int outlink(struct obj *p)
{
while(p){
printf("%d",p->a);
p=p->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
int num;
printf("请输入一个数:");
scanf("%d",&num);
head = createlink(num);
outlink(head);
return 0;
}
//思想:将要转换的数x除以要转换的进制,取余数放入链表,动态申请,商进行循环。。。
2、建立一个链表,从键盘上输入字符,输入字符为'0'时停止,然后反序输出。
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
char ch;
};
struct obj *createlink()
{
struct obj *p,*head;
char c;
head=NULL;
while((c=getchar())!='0')
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
p->ch=c;
p->link=head;
head=p;
}
return head;
}
int outlink(struct obj *p)
{
while(p){
printf("%c",p->ch);
p=p->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
printf("请输入一个字符,以0结束:");
head = createlink();
outlink(head);
return 0;
}
//与上题写函数的方法相似,先写一个创建链表的函数,在创建的过程中,就按照要求对链表里面内容进行赋值,然后写一个打印链表的函数。这里涉及到了单向链表 堆栈的存储结构,特点是先进后出。先存入的元素最后打印,这样就实现了题目中要求的倒序的要求。
3、用链表的方式,输入若干书的书名和单价,输入的单价为‘0’时停止输入,然后按单价进行排序后输出。
#include <stdio.h>
#include <stdlib.h>
struct obj
{
struct obj *link;
char bookname[40];
int price;
};
struct obj *createlink()
{
struct obj *p,*head;
char name[40];
int pr;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
head=NULL;
while(pr!=0)
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
strcpy(p->bookname,name);
p->price=pr;
p->link=head;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
}
return (head);
}
int outlink(struct obj *p)
{
struct obj *head,*q;
int tt;
char aa[40];
head=p;
while(p!=NULL){
q=p->link;
while(q!=NULL){
if((p->price)>(q->price)){
strcpy(aa,(q->bookname));
tt=q->price;
strcpy((q->bookname),(p->bookname));
q->price=p->price;
strcpy((p->bookname),aa);
p->price=tt;
}
q=q->link;
}
p=p->link;
}
while(head){
printf("%s",head->bookname);
printf(" %d",head->price);
head=head->link;
}
printf("\n");
return 0;
}
int main()
{
struct obj *head;
head = createlink();
outlink(head);
return 0;
}
4、编写函数creat,用来建立一个单链表,新产生的结点总在链表的末尾,单链表的头指针作为函数值返回。
struct obj *createlink()
{
struct obj *p,*head,*q;
char name[40];
int pr;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
head=NULL;
while(pr!=0)
{
if((p=(struct obj *)malloc(sizeof(struct obj)))==NULL){
printf("堆栈溢出\n");
break;
}
strcpy(p->bookname,name);
p->price=pr;
p->link=head;
q->link=p;
q=p;
printf("请输入书名:");
scanf("%s",&name);
printf("请输入书的价格:");
scanf("%d",&pr);
}
return (head);
}
相关文章推荐
- 单向链表及其应用(C语言)
- c语言,指针,及其应用
- C语言实现单链表的基本操作及其部分面试题
- 《C语言及程序设计》程序阅读——位运算及其应用
- 【学习ios之路:C语言】①指针及其简单的应用
- 链表的改进及其应用
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 单链表及其基本操作(C语言实现)
- C语言及程序设计进阶例程-29 枚举类型及其应用
- 【C语言】数学库函数及其应用
- linux内核之hlist哈希链表的应用---C语言代码实现(内核态)
- c语言实现单链表数据结构及其基本操作
- C语言及程序设计进阶例程-30 联合体及其应用
- C语言中三目运算符及其应用
- 【数据结构与算法基础】单链表及其应用基数排序 / Singly Linked List and radix sort
- C语言进阶-第19讲:链表应用(链表的合并)
- C语言实现链表及其操作
- 【每日算法】归并排序及其应用(逆序对&合并有序链表)
- C语言中多维数组的常见动态分配方式及其在函数参数传递时的应用