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

顺序表是较简单的一种,但对我不同了,我大一那年和大二的上半年玩了整个一年半,
到这个学期学数据结构,一听,晕了!!!不晕才怪,连个简单的程序都不明白,虽然思路很清楚,但也不会写啊
相信那些从大一混过来的人都有同感,,,,没有办法,本人只好从大一的C学起,我感觉学数据结构至少要明白一门语言,没有时间精通的话至少要知道些,虽然很多人说学数据结构跟语言没有关系,但我不这样认为的,毕竟很多情况大家都能想明白思路,但写出来的时候问题就有一堆了,那些细节就对你对知识的理解要求高了,要你完全的明白每一步是怎么实现的,不然写程序容易出问题的/
我学了两个月的C了,当然在明白一些基础语法的基础上,有的关系不大的没有学像文件,有的地方还没有真正的理解

下面是我第一次自己写的自己调的,VC++运行成功.虽然比较简单,但总算是有个开始了,不再总是去害怕去写了,害怕写的人不如试着写几次,错了没有关系,慢慢的你就会写一个出来,之后就会有更多的
基础差的也不要灰心,因为我们还年经,希望跟大家一起努力,进步;
写完了心情好多了.

#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"

#define INITLISTSIZE 100
#define INCREMENT 10
#define error 0

typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;

int CreatLinklist(Sqlist &L);
int InitLinklist(Sqlist &L, int n);
void print(Sqlist &L);
int GetElem(Sqlist L, int i, int &e);
int InsertList(Sqlist &L,int i,int e);
int ListDele_Sq(Sqlist &L,int i,int &e);
void MergeLinklist(Sqlist La, Sqlist Lb, Sqlist &Lc);


int CreatLinklist(Sqlist &L)
{
L.elem=(int*)malloc(sizeof(int)*INITLISTSIZE);
if(!L.elem)exit(1);
L.length=0;
L.listsize=INITLISTSIZE;
return 1;
}

int InitLinklist(Sqlist &L, int n)
{
int *p,i;

if(n>L.listsize)
{ L.elem=(int*)realloc(L.elem,sizeof(int)*(INITLISTSIZE+INCREMENT));
L.listsize+=INCREMENT;
}
if(!L.elem)exit(1);

p=L.elem;
for(i=0;i<n;i++)
{
scanf("%d",p++);
++L.length;
}
return 1;

}

void print(Sqlist &L)
{
int *p1;
p1=L.elem;
printf("*********************\n");
while(p1<L.elem+L.length)
printf("%d ", *p1++);
printf("\n*********************\n");
}
#if 0
int GetElem(Sqlist L, int i, int &e)
{
if(i<1||i>L.length) return error;
e=L.elem[i-1];
return 1;
}
#endif

int InsertList(Sqlist &L, int i, int e)
{
int *q,*p;
if(i<1||i>L.length+1) return error;
if(L.length>=L.listsize)
{
L.elem=(int*)realloc(L.elem,sizeof(int)*(INITLISTSIZE+INCREMENT));
L.listsize+=INCREMENT;
}
if(!L.elem)exit(1);
q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;p--)
*(p+1)=*p;
*q=e;
++L.length;

return 1;

}

int ListDele_Sq(Sqlist &L,int i,int &e)
{
int *p,*q;
if((i<1)||(i>L.length)) return error;

p=&(L.elem[i-1]);
e=*p;
q=&(L.elem[L.length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return 1;

}

void MergeLinklist(Sqlist La, Sqlist Lb, Sqlist &Lc)
{
int i=0, j=0,k=0;
int *p=La.elem,*q=Lb.elem;
if(Lc.listsize<La.listsize+Lb.listsize)
Lc.elem=(int *)realloc(Lc.elem,sizeof(int)*(La.listsize+Lb.listsize));
Lc.listsize=La.listsize+Lb.listsize;

while( (i<La.length) && (j<Lb.length) )
{

if(p[i]<q[j])
{
Lc.elem[k++]=p[i];
++i;
++Lc.length;
}
else
{
Lc.elem[k++]=q[j];
++j;
++Lc.length;
}

}

while((i<La.length))
{
Lc.elem[k++]=p[i];
++i;
++Lc.length;
}
free(La.elem);
while(j<Lb.length)
{
Lc.elem[k++]=q[j];
++j;
++Lc.length;
}
free(Lb.elem);


}

int main()
{
int a1,a2, p1,p2, b, e;
Sqlist La, Lb, Lc;

CreatLinklist(La);
printf("Input the length of the List A: ");
scanf("%d",&a1);
printf("Please Init the List A from small to big:");
InitLinklist(La, a1);
print(La);

CreatLinklist(Lb);
printf("\nInput the length of the List B: ");
scanf("%d",&a2);
printf("Please Init the List B from small to big:");
InitLinklist( Lb, a2);
print(Lb);


printf("\nThe merged list C is as follows:\n");
CreatLinklist(Lc);
MergeLinklist(La, Lb, Lc);
print(Lc);

printf("\nInput the Inserted position and the Inserted value:\n");
scanf("%d%d", &p1, &b);
InsertList(Lc, p1, b);
print(Lc);

printf("\nInput the deleted position :\n");
scanf("%d", &p2);
ListDele_Sq(Lc, p2, e);
print(Lc);
printf("THe deleted number is %d.\n",e);

free(Lc.elem);

return 0;
}




搜索更多相关主题的帖子: 顺序 
2006-05-14 02:51
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
恩,8错,我也写了这个,一起努力吧!

2006-05-14 09:04
大猪小猪
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-4-18
收藏
得分:0 
哎真是有同感啊,革命尚未成功同志还需努力啊!
2006-05-14 09:34
wxcd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-8
收藏
得分:0 


en 搂主 是大几啊

2006-05-14 13:36
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵
现在大二,不过马上就要大三了啊

明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-05-14 14:10
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
return 1;

你都返回这么多1做什么,你的函数调用又没有接收返回值,你返回它做什么,定义为VOID不就完了吗


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-16 00:47
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
  程序风格很不错。。。。建议楼主改用C++的类来写

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2006-05-16 11:55
gaga
Rank: 1
等 级:新手上路
威 望:2
帖 子:307
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用激情依旧在2006-5-16 11:55:00的发言:
程序风格很不错。。。。建议楼主改用C++的类来写

我会朝这努力的,但现在没有时间,呵呵,
有时间的话我会看点C++的


明天的明天还有明天。 可是今天却只有一个。 public Copy from 无缘今生
2006-05-17 19:01
janlun86
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-5-9
收藏
得分:0 
很感谢你!

天道酬勤,切忌浮躁
2006-06-06 19:37
guanjun
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-10-11
收藏
得分:0 
俺都大二咯,不晓得啥子时候可以编个线表应用的............
!!!!!!!!!!!!!!!!!!!!

2006-10-11 21:06
快速回复:[原创]顺序表的基本操作
数据加载中...
 
   



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

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