首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

才学数据结构,C语言的,一上来就遇到麻烦了,

2012-04-18 
【求助】才学数据结构,C语言的,一上来就遇到麻烦了,求助。。。才学数据结构,感觉挺复杂的。。。这是老师布置的题目

【求助】才学数据结构,C语言的,一上来就遇到麻烦了,求助。。。
才学数据结构,感觉挺复杂的。。。
这是老师布置的题目:有一个表元素按值递减排列的顺序表,编写一个函数用以实现删除顺序表中多余的值相同的元素

麻烦的地方是,一有3个或者3个以上的重复元素就会出问题(如:9 9 9 8 7 6 6 6 6 5),感觉应该是删除元素那边错了,但是找不出错在哪啊。

代码如下:


#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define ElemType int


typedef struct
{
ElemType data[MAX];
int length;
}SeqList;

SeqList SeqListInit()//括号里的SeqList L需要否?
{
SeqList L;
L.length=0;
return L;
}

SeqList SeqListCreate(SeqList L)
{
ElemType x;
for(;L.length<100;L.length++)
  {
char c;
  scanf("%d%c",&x,&c);
  L.data[L.length]=x;
  if(c=='\n') break;
  }
return L;
}


void SeqListDecrease(SeqList *L)
{
int i;
for(i=0;i<L->length;i++)
if(L->data[i]<L->data[i+1])
{
printf("不是元素按值递减排列的顺序表");
exit(0);
}
printf("删除值相同的元素后:\n");
}


void SeqListDelete(SeqList *L)
{
int m,n,k;
ElemType temp;
for(m=0;m<=L->length;m++)
{
temp=L->data[m];
for(n=m+1;n<=L->length;n++)
if(temp==L->data[n])
{
for(k=n;k<=L->length-1;k++)
{
L->data[k]=L->data[k+1];
}
L->length--;
}
}
}


int main()
{
int i;
SeqList seqList;
seqList=SeqListInit();
printf("创建一个元素按值递减排列的顺序表:");
seqList=SeqListCreate(seqList);
 SeqListDecrease(&seqList);  
  SeqListDelete(&seqList);  
for(i=0;i<=seqList.length;i++)
printf("%d\t",seqList.data[i]);
printf("\n删除后的顺序表元素个数:%d\n",++seqList.length);
return 0;

}


[解决办法]
第一个问题,直接返回零就行了。
整个没看完,只给一个建议
你检查一下 9 9 9
这三个连续的相同数据,比较数据1和数据2,删除数据2,当前数据位置移动到数据3,就会出问题。
所以比较数据1和数据2,删除数据1,当前数据位置为第二个,检查第二个和第三个。
或比较数据1和数据2,删除数据2,当前位置指向数据一。思想有些类似于冒泡排序。

再给一个小建议,最好能说清楚你出的问题是什么样的,这样可能不用看代码就能分析出来。。
[解决办法]
pointer p1,p2;
p1=head;
p2=p1->next;

while(p2!=null)
{
while(*p2==*p1)
{
p1->next=p2->next;
p2=p2->next;
}
p1=p2;
p2=p1->next;
}

热点排行