C

来源:互联网 发布:连江尚德中学网络硬盘 编辑:程序博客网 时间:2024/05/21 03:54

数据结构顺序链表的实现

#include <stdio.h>  #include <stdlib.h>  //成功返回1 ,失败返回0,存储分配失败返回-1 typedef int Status; #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10   //线性表存储空间的分配增量  typedef int ElemType;//元素类型  typedef struct SqList{      ElemType *elem;//线性表首地址      int length;//当前的长度      int listsize;//当前分配的存储容量,以elemType为单位  }SqList;     //创建一个线性表int InitList_Sq(SqList &L){(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!(*L).elem){   return -1;                   /* 存储分配失败 */    }    (*L).length=0; /* 空表长度为0 */    (*L).listsize=LIST_INIT_SIZE;    /* 初始存储容量 */    return 1;}  //依次显示顺序表中的元素 void PrintList(SqList *L) {int i;    for(i=1;i<=(*L).length;i++){    printf("%d\t", (*L).elem[i-1]);}    printf("共%d个元素\n",(*L).length);}//在表中第pos个位置之前插入新元素e,注意pos指队伍编号是从1开始的 int Insert_Sq(SqList *L,ElemType e,int pos)  {    ElemType *n,*q,*p;if(pos<1||pos>(*L).length+1){//pos值不合法     return 0;} if((*L).length>=(*L).listsize){ //存储空间满时,增加分配   n = (ElemType *)realloc(L,((*L).listsize+LISTINCREMENT*sizeof(ElemType)));     if(!n)       return -1; // 存储分配失败     (*L).elem=n;     (*L).listsize += LISTINCREMENT*sizeof(ElemType); }    q=(*L).elem+pos-1; // q为插入位置     for(p=(*L).elem+(*L).length-1;p>=q;p--) // 插入位置及之后的元素右移     *(p+1)=*p;   *q=e; //插入e */    (*L).length++;// 表长增1 */}//删除第pos个元素,注意pos指队伍编号是从1开始的   int DeleteElem(SqList *L,int pos) {ElemType *p,*q;if(pos<1||pos>(*L).length+1){//pos值不合法     return 0;}p = (*L).elem + pos -1;//被删元素的位置 q=(*L).elem+(*L).length-1; //表尾元素的位置 for(p=p+1;p<=q;p++){*(p-1)=*p;} (*L).length -- ;return 1;}//(选作)将两个顺序表合并存入第一个顺序表,使所有元素从小到大排列void MergeList(SqList *La,SqList *Lb){ int i,j,temp;int lenB = (*Lb).length ;for(i=0;i<lenB;i++){Insert_Sq(La , (*Lb).elem[i] ,(*La).length);}int lenA = (*La).length ;for(i=0;i<lenA;i++){for(j=0;j<lenA-i-1;j++){if((*La).elem[j]>(*La).elem[j+1]){temp = (*La).elem[j];(*La).elem[j] = (*La).elem[j+1];(*La).elem[j+1] = temp;}}}}int main(){      SqList list1, list2;  int i,pos;      ElemType temp;      printf("Shibingfan ,Hello\n");//建立一个新的顺序表list1    InitList_Sq(&list1);printf("list1:\t");PrintList(&list1);//在list1中依次插入1-3-5-7-9for(i=1;i<=5;i++){temp=2*i-1;    Insert_Sq(&list1,temp,i);  }printf("new list1:\t");PrintList(&list1);//删除指定的位置上的元素 printf("Pls enter the position (starting from 1) to delete:\t");    scanf("%d",&pos);    DeleteElem(&list1,pos); printf("list1 after delete:\t"); PrintList(&list1);//建立一个新的顺序表list2,依次插入2-4-6-8     InitList_Sq(&list2);for(i=1;i<=4;i++){temp=2*i;    Insert_Sq(&list2,temp,i);  }printf("list2:\t");PrintList(&list2);//将上述两个顺序表合并     MergeList(&list1,&list2);      printf("Merged list:\t");  PrintList(&list1);    return 0;  } 


原创粉丝点击