主题:能不能给我一个完整的线性表程序看看
usabbs09
[专家分:0] 发布于 2006-11-02 15:42:00
我学了两个多月数据结构,最最简单的线性表怎么初始化我都不懂,上课老师老是讲什么算法,似乎看懂,可到自己上机时,往往无从下手……
请给我一个完整的程序(能够运行),简单一点,让我看看,那些功能具体是怎么实现的。
回复列表 (共11个回复)
沙发
xieyong456 [专家分:2620] 发布于 2006-11-02 16:45:00
找本基础的书看看吧,从最简单的学期,先学理论~
#include <stdio.h>
#define N 6
int main(void)
{
int a[N];
int i;
for(i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
for(i = 0; i < N; i++)
{
printf(" %d", a[i]);
}
getch();
}
板凳
usabbs09 [专家分:0] 发布于 2006-11-04 00:39:00
噢!补充一点,我想要个有关线性表操作的程序,比如那些基本的初始化,插入,删除,置换元素等等功能。
这些算法我看了,似乎懂了,但是写成程序去实现时却一头雾水。麻烦写个程序我看看。不胜感激!!
3 楼
iamqsd [专家分:60] 发布于 2006-11-05 15:28:00
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct lnode{
ElemType date;
struct lnode *next;
}lnode,*linklist;
linklist initlist(void){ //链式表的初始化函数
linklist head;
linklist p,q;
ElemType flag;
p=(linklist)malloc(sizeof(struct lnode));
head=q=p;
if(!p){
printf("ERROR!\n");
exit(0);
}
scanf("%d",&p->date);
flag=p->date;
p->next=NULL;
if(flag==0){exit(0);}
while(flag!=0){
p=(linklist)malloc(sizeof(struct lnode));
if(!p){
printf("ERROR!\n");
exit(0);
}
scanf("%d",&p->date);
flag=p->date;
if(flag==0){break;}
else{
q->next=p;
q=p;
p->next=NULL;
}
}
return(head);
}
linklist insert(linklist head,int i,ElemType e){ //插入元素函数
linklist p1,p2,q;
p1=head;
if(1==i){
q=(linklist)malloc(sizeof(struct lnode));
q->date=e;
q->next=p1;
head=q;
}
else{
while(i!=1&&p1!=NULL){
p2=p1;
p1=p2->next;
i--;
}
if(p1==NULL&&i!=1){
printf("ERROR!");
}
if(i==1){
q=(linklist)malloc(sizeof(struct lnode));
q->date=e;
p2->next=q;
q->next=p1;
}
}
return(head);
}
4 楼
iamqsd [专家分:60] 发布于 2006-11-05 15:28:00
void print(linklist head){ //输出函数
linklist p;
for(p=head;p!=NULL;p=p->next){
printf("%d ",p->date);
}
}
void lisedel(linklist head){
linklist p1,p2;
int i;
scanf("%d",&i); //输入要删除的元素的位置
p1=head;
if(1==i){
head=p1->next;
//free(p1);
}
else{
while(i!=1&&p1!=NULL){
p2=p1;
p1=p2->next;
i--;
}
if(p1==NULL&&i!=1){
printf("ERROR!");
}
if(i==1){
p2->next=p1->next;
free(p1);
}
}
}
linklist nizhi(linklist head){ //逆置线型表
linklist p1,p2,p3,tail;
tail=head;
p1=head;
p2=p1->next;
p3=p2->next;
tail->next=NULL;
while(1){
p2->next=p1;
p1=p2;
p2=p3;
p3=p3->next;
if(p3==NULL){
head=p2;
p2->next=p1;
break;
}
}
return head;
}
int main(){
printf(" 单链顺序表\n");
linklist head;
int i=1,flag=0;
ElemType e;
while(i!=0){
printf("\n请选择所要进行的操作:\n");
printf(" 0.初始化链式线型表(以输入0结束)\n");
printf(" 1.插入新的元素\n");
printf(" 2.删除所选的元素\n");
printf(" 3.逆置链式线型表\n");
printf(" 4.输出表中的现有元素\n");
printf("请选择:");
scanf("%d",&i);
switch(i){
case 0: printf("请输入初始化的元素:\n");
head=initlist();
i=1;flag=1;break;
case 1: if(flag==1){
printf("输入要插入的位置和值:\n");
scanf("%d%d",&i,&e); //输入要插入的位置和值
head=insert(head,i,e); //插入新的元素
}
else {
printf(" ERROR,请先选择0初始化链表!");
}
i=1;break;
case 2: if(flag==1){
printf("输入要删除的元素的位置:\n");
lisedel(head);
}
else {
printf(" ERROR,请先选择0初始化链表!");
}
i=1;break;
case 3: if(flag==1){
head=nizhi(head);
printf("逆置成功!");
}
else {
printf(" ERROR,请先选择0初始化链表!");
}
i=1;break;
case 4: if(flag==1){
print(head);
}
else {
printf(" ERROR,请先选择0初始化链表!");
}
i=1;break;
}
}
return 0;
}
5 楼
freeeerf [专家分:5440] 发布于 2006-11-05 19:56:00
听老师讲个屁!数据结构的课我都很少去上.
上课会使迟钝,知道吗?特别是编程这种事,不要听别人是怎么,不要看别人是怎么编,自己想,想怎么编就怎么编,想怎么想就怎么想,当实在想不出来,或想看看自己想得好还是别人想的好的时候再去看别人的程序.......自己不肯动脑袋想,只看别人的程序,只会越看越无聊,越学越不爽.
6 楼
usabbs09 [专家分:0] 发布于 2006-11-07 10:56:00
噢!!或者上面的朋友说得对!!谢谢指教!
7 楼
usabbs09 [专家分:0] 发布于 2006-11-07 12:18:00
请问上面的程序分别用inklist 和lnode 定义的变量有什么不同?
8 楼
yqin [专家分:150] 发布于 2006-11-26 17:07:00
初学者 还是多看看书,多模仿着写程序,在写的过程中,会慢慢的提高的。
9 楼
lg182 [专家分:40] 发布于 2006-11-26 22:41:00
真理啊 以后多多实践喽
10 楼
theoneclan [专家分:50] 发布于 2007-06-23 23:10:00
看程序不一定没有用,多看看他人程序,学习他人的思想有助于自身的提高!!!
当然自己动手也要勤,不要怕不会,多尝试!!!
我来回复