我同学找我帮忙写个题 北邮数据结构程序设计题:
利用单链表实现以下要求
1。输入若干整数,输入过程中将它们构造成单向链表,插入时保持升序 2。从链表中添加或删除指定数值的数据项 3。将构造的上述链表逆项转置 ************************************************ 以下是我写的一个程序
#include <stdio.h> #include <malloc.h> typedef struct node *point; struct node { int data; point next; };
void print(point head)//输出链表 { point p; p=head->next; while(p) { printf("%d -> ",p->data); p=p->next; } printf("NULL "); }
void revers(point head)//链表逆转置 { point p,q,r; p=head->next; q=p->next; r=q->next; if(p==NULL || q==NULL) printf("该链表无须转置。"); p->next=NULL; p=q; while(r->next) { q=r; r=r->next; q->next=p; p=q; } r->next=p; head->next=r; }
void Insert(point p,int x)//按升序插入数据,允许有重复数据 { point q,r; q=p->next; while(q && q->data<x) { p=p->next; q=q->next; } r=(struct node *)malloc(sizeof(struct node)); if(!r) printf("分配失败"); r->data=x; r->next=q; if(!q) r->next=NULL; p->next=r; }
point creat()//任意顺序输入数据,建立升序链表 { int x; point p; point head;
head=(struct node *)malloc(sizeof(struct node)); if(!head) printf("分配失败/n"); p=head; printf("请输入数字:"); scanf("%d",&x); while(x!=0) { Insert(head,x); printf("请输入数字:"); scanf("%d",&x); } printf("您输入的数据为: "); print(head); return head; }
void Delet(point head,int x)//删除所有x { int i; point p; point q; point r; p=head; q=p->next; r=NULL; while(q) { if(q->data==x) { p->next=q->next; r=q; q=q->next; free(r); i++; } else { p=p->next;q=q->next; } } if(i==0) printf("输入的数不存在。"); else { printf("删除后链表变成:"); print(head); } }
void choose(point head) { int x; printf("a. 插入一个数据/n"); printf("b. 删除一个数据/n"); printf("c. 将该链表逆转置/n"); printf("d. 退出程序/n"); printf("请选择操作:/n"); char grade; grade=getchar(); if (grade=='a'||grade=='A') { printf("请输入要插入的数据:"); scanf("%d",&x); Insert(head,x); printf("插入后链表变成:"); print(head); choose(head); } else if (grade=='b'||grade=='B') { printf("请输入要删除的数据:"); scanf("%d",&x); Delet(head,x); printf("删除后链表变成:"); print(head); choose(head); } else if (grade=='c'||grade=='C') { printf("逆转置前链表为:"); print(head); revers(head); printf("逆转置后链表为:"); print(head); } else if (grade=='d'||grade=='D'); else { printf("输入错误,请重新选择:/n"); choose(head); } }
void main() { point head; head=creat(); choose(head); }
*********************************
运行环境VC++6.0 这个程序在compile 和build 时都没问题,能运行
但在BuildExecute时,输入第一个数后,就显示该内存为只读而跳出,
请斑竹帮帮忙,给个解决方案
[此贴子已经被作者于2005-10-7 13:41:58编辑过]