顺序表是较简单的一种,但对我不同了,我大一那年和大二的上半年玩了整个一年半,
到这个学期学数据结构,一听,晕了!!!不晕才怪,连个简单的程序都不明白,虽然思路很清楚,但也不会写啊
相信那些从大一混过来的人都有同感,,,,没有办法,本人只好从大一的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;
}