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



											
	    

	

										
					
	
											

建议楼主改用C++的类来写