1. 程式人生 > >C語言---動態建立順序表及定義、插入、刪除操作

C語言---動態建立順序表及定義、插入、刪除操作

題目:編寫一個程式,動態的建立一個順序表。要求:順序表的初始長度為10,向順序表中輸入15個整數,並打印出來;再刪除順序表中的第5個元素,打印出刪除後的結果。

程式程式碼:

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef int ElemType;		//便於方便後續更改資料型別 

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

//引數L:Sqlist型別的指標 
void initSqlist(Sqlist *L){
	L->elem=(int *)malloc(Maxsize*sizeof(ElemType));
	if(!L->elem){
		printf("記憶體分配失敗\n");
		exit(0);
	}
	L->length=0;
	L->listsize=Maxsize;
}

void InsertElem(Sqlist *L,int i,ElemType item){
	ElemType *base,*insertPtr,*p;
	if(i<1 || i>L->length+1)  exit(0);      //非法插入 
	if(L->length >= L->listsize){            //為表重新分配空間 
		base=(ElemType *)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
		L->elem = base;
		L->listsize = L->listsize+100;
	}
	insertPtr = &(L->elem[i-1]);
	for(p=&(L->elem[L->length-1]);p>=insertPtr;p--){
		*(p+1) = *p;
	}
	*insertPtr = item;
	L->length++;	
}

void Delelem(Sqlist *L, int i){
	ElemType *delitem,*q;
	if(i<1 || i>L->length) exit(0);
	delitem = &(L->elem[i-1]);
	q=L->elem + L->length-1;
	for(++delitem;delitem<=q;++delitem)  *(delitem-1) = *delitem;
	L->length--;
}

int main(int argc, char *argv[]) {
	Sqlist l;
	int i;
	initSqlist(&l);
	for(i=0;i<15;i++){
		InsertElem(&l,i+1,i+1);
	}
	printf("The content of the list is:\n");
	for(i=0;i<l.length;i++){
		printf("%d ",l.elem[i]);
	}
	Delelem(&l,5);
	printf("\nDelete the fifth element:\n");
	for(i=0;i<l.length;i++){
		printf("%d ",l.elem[i]);
	}
	return 0;
}

執行結果: