C/C++【顺序表】【初始化、赋值、打印、取值、查找、插入、删除、销毁、综合举例】
生活随笔
收集整理的這篇文章主要介紹了
C/C++【顺序表】【初始化、赋值、打印、取值、查找、插入、删除、销毁、综合举例】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
1、運(yùn)行截圖
2、代碼
1、運(yùn)行截圖
2、代碼
#include <stdio.h> #include <stdlib.h>#define MAXSIZE 100 #define ElemType int #define Status int #define OK 1 #define ERROR 0 #define OVERFLOW -2typedef struct {ElemType *elem;int length; } SqList;void menu(); Status InitList(SqList &L); //初始化鏈表 Status CreatList(SqList &L); //賦值 Status PrintList(SqList &L); //打印順序表 Status GetElem(SqList &L, int i, ElemType &e); //順序表的取值 int Locate(SqList &L, ElemType e); //順序表的查找 Status ListInsert(SqList &L, int i, ElemType e); //順序表的插入 Status ListDelete(SqList &L, int i); //順序表的刪除 void DestoryList_Sq(SqList &L); //銷毀順序表 void UnionSqlist(SqList &la, SqList &lb); //舉例應(yīng)用1 void purge(SqList &la, SqList &lb); //構(gòu)造線性表la,使其只包括lb中所有值不同的數(shù)據(jù)元素 Status isequal(SqList &la, SqList &lb); //若線性表la和lb不僅長(zhǎng)度相等,且所含數(shù)據(jù)元素也相同,則返回OKvoid menu() {printf("\n");printf("*********順序表基本功能的實(shí)現(xiàn)**********\n");printf("*********1---初始化順序表 **********\n");printf("*********2---賦值順序表 **********\n");printf("*********3---打印順序表 **********\n");printf("*********4---取值 **********\n");printf("*********5---查找元素是否存在**********\n");printf("*********6---插入元素 **********\n");printf("*********7---刪除元素 **********\n");printf("*********0---退出 **********\n");printf("\n"); }int main() {int e;int locate;SqList L;int select;while (1){menu();printf("請(qǐng)輸入您要實(shí)現(xiàn)的功能:\n");scanf("%d", &select);switch (select){case 1:if (InitList(L))printf("初始化成功\n");elseprintf("初始化失敗\n");break;case 2:CreatList(L);break;case 3:PrintList(L);break;case 4:printf("請(qǐng)輸入元素的位置:\n");scanf("%d", &locate);if (GetElem(L, locate, e))printf("第%d個(gè)位置上的數(shù)為%d", locate, e);elseprintf("取值失敗.\n");break;case 5:printf("請(qǐng)輸入要查找的元素:");scanf("%d", &e);locate = Locate(L, e);if (locate)printf("\n該元素在列表的位置是%d\n", locate);elseprintf("\n不存在該元素\n");break;case 6:printf("請(qǐng)輸入您要插入的位置和元素值:\n");scanf("%d%d", &locate, &e);printf("*********插入前************\n");PrintList(L);if (ListInsert(L, locate, e)){printf("插入成功\n");printf("*********插入后************\n");PrintList(L);}elseprintf("插入失敗\n");break;case 7:printf("請(qǐng)輸入您要?jiǎng)h除的位置:\n");scanf("%d", &locate);printf("*********刪除前************\n");PrintList(L);if (ListDelete(L, locate)){printf("刪除成功\n");printf("*********刪除后************\n");PrintList(L);}elseprintf("刪除失敗\n");break;case 0:return 0;default:printf("對(duì)不起,暫沒有該功能。\n");}}SqList la, lb;/*UnionSqlist(la,lb);printf("*****兩表合并后的結(jié)果為:*******\n");PrintList(la);printf("目前l(fā)a表的表長(zhǎng)為:%d\n",la.length);*///對(duì)線性表lb提純/* purge(la,lb); *///比較兩個(gè)列表是否相等if (isequal(la, lb))printf("la和lb相等。\n");elseprintf("la和lb不相等。\n");return 0; }Status InitList(SqList &L) {L.elem = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));if (!L.elem)exit(OVERFLOW);L.length = 0;return OK; }Status CreatList(SqList &L) {int num, i;printf("******現(xiàn)在開始賦值********\n");printf("請(qǐng)輸入總個(gè)數(shù):\n");scanf("%d", &num);for (i = 0; i < num; i++){printf("請(qǐng)輸入第%d個(gè)數(shù):", i + 1);scanf("%d", &L.elem[i]);L.length++;}if (L.length == num)return OK;elsereturn ERROR; }Status PrintList(SqList &L) {if (!L.length)return ERROR;int i = 0;printf("*******打印開始********\n");for (; i < L.length; i++)printf("%d ", L.elem[i]);printf("\n");printf("*******打印結(jié)束********\n");return OK; }Status GetElem(SqList &L, int i, ElemType &e) {if (i < 1 || i > L.length)return ERROR;e = L.elem[i - 1];return OK; }int Locate(SqList &L, ElemType e) {int i = 0;for (; i < L.length; i++)if (e == L.elem[i])return i + 1;return 0; }Status ListInsert(SqList &L, int i, ElemType e) {//1.判斷是否合法if (i < 1 || i > L.length + 1)return ERROR;//2.判斷順序表的存儲(chǔ)空間是否已滿,若滿則返回error.if (L.length == MAXSIZE)return ERROR;//3.將第n個(gè)至第i個(gè)位置的元素依次向后移動(dòng)一個(gè)位置,空出第i個(gè)位置(i=n+1時(shí)無需移動(dòng))。int j;for (j = L.length - 1; j >= i - 1; j--)L.elem[j + 1] = L.elem[j];//4.將要插入的新元素e放入第i個(gè)位置L.elem[i - 1] = e;//5.表長(zhǎng)加1.L.length++;return OK; }Status ListDelete(SqList &L, int i) {//1、判斷刪除位置是否合法,若不合法則返回ERROR.if (i < 1 || i > L.length)return ERROR;//2、將第i+1個(gè)至第n個(gè)元素依次向前移動(dòng)一個(gè)位置int j;for (j = i; j < L.length; j++)L.elem[j - 1] = L.elem[j];//3、表長(zhǎng)減1L.length--;return OK; }void DestoryList_Sq(SqList &L) {delete[] L.elem;L.length = 0; }void UnionSqlist(SqList &la, SqList &lb) {//將線性表lb中所欲在la中不存在的元素插入到la中,算法執(zhí)行結(jié)束后,線性表lb將不再存在//初始化la、lb并賦值InitList(la);InitList(lb);printf("請(qǐng)給la表賦值:\n");CreatList(la);printf("請(qǐng)給lb表賦值:\n");CreatList(lb);//打印檢查PrintList(la);PrintList(lb);int i = la.length, j = 0;while (j <= lb.length - 1){if (Locate(la, lb.elem[j]))j++;else{la.elem[i] = lb.elem[j];la.length++;i++;j++;}}DestoryList_Sq(lb); }void purge(SqList &la, SqList &lb) {//構(gòu)造線性表laInitList(la);//初始化并給lb賦值InitList(lb);CreatList(lb);int j = 0, i = 0;while (j < lb.length){if (Locate(la, lb.elem[j]))j++;else{ListInsert(la, i, lb.elem[j]);i++;}}//打印laprintf("原始數(shù)列是:\n");PrintList(lb);printf("提純后:\n");printf("la的長(zhǎng)度為%d:\n", la.length);PrintList(la);//銷毀lbDestoryList_Sq(lb); }Status isequal(SqList &la, SqList &lb) {//初始化la,lb,lc;InitList(la);InitList(lb);//給la和lb賦值CreatList(la);CreatList(lb);int lena = la.length;int lenb = lb.length;if (lena != lenb)return ERROR;else{SqList lc;InitList(lc);//把la的值賦值一份給lcint i = 0;for (; i < la.length; i++){lc.elem[i] = la.elem[i];lc.length++;}//打印la和lc進(jìn)行驗(yàn)證/* printf("la為:\n");PrintList(la);printf("lc為:\n");PrintList(lc);*///進(jìn)行比較int j = 0;for (; j < lenb; j++){if (Locate(lc, lb.elem[j]))ListDelete(lc, lb.elem[j]);}if (lc.length == 0)return OK;elsereturn ERROR;} }多謝觀看~
總結(jié)
以上是生活随笔為你收集整理的C/C++【顺序表】【初始化、赋值、打印、取值、查找、插入、删除、销毁、综合举例】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构 排序【简单排序(冒泡、插入)、
- 下一篇: 计算机组成原理 第五章【中央处理器】课后