1.設(shè)某線性表數(shù)據(jù)元素的類型為整型,以順序結(jié)構(gòu)存儲(chǔ)線性表。試編程實(shí)現(xiàn):
(1) 線性表置空
(2) 求線性表長(zhǎng)度
(3) 數(shù)據(jù)元素的插入操作
(4) 數(shù)據(jù)元素的刪除操作
(5) 顯示線性表中的全部元素
#include<stdio.h>
#include<malloc.h>
#include <conio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define ERROR
0
#define OK 1
#define OVERFLOW -2
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList *L) //括號(hào)中傳遞參數(shù)是是它的指針L,這樣才能對(duì)它指向的元素改變。
{
int i;
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem) exit(OVERFLOW);
L->length =10;
L->listsize = LIST_INIT_SIZE; //分配初始的空間
for(i=0;i<L->length;i++)
{
L->elem[i]=i;
}
return OK;
}//InitList_Sq
int get_length(SqList *L)
{
return L->length;
}
int destroy(SqList *L)
{
L->length=0;
return OK;
}
int ListInsert_Sq(SqList *L,int i, int e)
{ //在順序表L中的第i個(gè)位置之前插入新的元素e;
//i的合法值為1<=i<=ListLength_Sq(L)+1;
int *newbase,*q,*p;
if(i<1||i>L->length+1) return ERROR;
if(L->length>=L->listsize){// 當(dāng)前的存儲(chǔ)空間已滿,增加分配
newbase = ( int *)realloc(L->elem,( L->listsize +LISTINCREMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW) ; //存儲(chǔ)空間分配失敗
L->elem = newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;
//插入位置及之后的元素右移
*q=e;
++L->length;
return OK;
}//ListInsert_Sq;
int ListDelete_Sq(SqList *L, int i, int e) {
// 在順序線性表L中刪除第i個(gè)元素,并用e返回其值。
// i的合法值為1≤i≤ListLength_Sq(L)。
int *p, *q;
if (i<1 || i>L->length) return ERROR; // i值不合法
p = &(L->elem[i-1]); // p為被刪除元素的位置
e = *p; // 被刪除元素的值賦給e
q = L->elem+L->length-1; // 表尾元素的位置
for (++p; p<=q; ++p) *(p-1) = *p; // 被刪除元素之后的元素左移
--L->length; // 表長(zhǎng)減1
return OK;
} // ListDelete_Sq
int display_all(SqList *L)
{