線性表的基本操作
內容:
(1)順序表的操作
輸入一組整型元素序列,建立線性表的順序存儲結構。實現該線性表的遍歷。在該順序表中查找某一元素,查找成功顯示查找元素,否則顯示查找失敗。在該順序表中刪除或插入指定元素。 建立兩個按值遞增有序的順序表,將他們合並成一個按值遞增有序的順序表。
(2)單鏈表的操作
輸入一組整型元素序列,使用尾插法建立一個帶有頭結點的單鏈表。 實現該線性表的遍歷。在該單鏈表的第i個元素前插入一個整數。刪除該單鏈表中的第i個元素,其值通過參數將其返回。建立兩個按值遞增有序的單鏈表,將他們合並成一個按值遞減有序的單鏈表。要求利用原來
#include<stdio.h> #include<stdlib.h> #define MAX 20 #define LISTINCREMENT 10 typedef struct{ int *elem; int length; int listsize; }SqList; void CreatList(SqList &L) {//建立一個線性表 L.elem=(int*)malloc(MAX *sizeof(int)); if(!L.elem) return;//exit(0) L.listsize=MAX; printf("輸入表的長度:"); scanf("%d",&L.length); printf("輸入%d個數:",L.length); for(int i=0;i<L.length;i++) scanf("%d",&L.elem[i]); } void Traverse(SqList L){ //遍歷 printf("表中數據為:"); for(int i=0;i<L.length;i++) printf("%3d",L.elem[i]); printf("\n"); } void LocateElem(SqList L,int e){ //查找 int i; printf("輸入查找的元素:"); scanf("%d",&e); for(i=0;i<L.length;i++) { if(L.elem[i]==e){ printf("查找成功,查找元素為%d",L.elem[i]); printf("\n"); return; } } printf("查找失敗"); printf("\n"); } int makesureElem(SqList L,int e) { int i; //確定要刪除的元素 for(i=0;i<L.length;i++) { if(L.elem[i]==e) { printf("要刪除的元素 位置為 %d",i+1); printf("\n"); return (i+1); } } printf("元素不存在"); printf("\n"); return 0; } void ListInsert(SqList &L) {//插入元素及其要插入的位置 int i,int e; printf("輸入要插入位置及元素\n"); scanf("%d%d",&i,&e); printf("在順序線性表中第%d個位置之前插入新的元素%d。\n",i,e);//在順序線性表L中第i個位置之前插入新的元素e, if(i<1||i>L.length+1) return; //i的合法位置為1<=i<=ListLength(L)+1 int *p,*q; q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p; *q=e; /*表示從鏈表的第i個元素開始一直到最后一個元素往后移一位p=&L.elem[L.length-1] 意思是p賦初值為鏈表的最后一個元素地址,p>=q表示循環知道p<q的時候結束,--p是使p指針的指向往前移一位*/ ++L.length; return; } int ListDelete(SqList &L){ //刪除元素 int i,int e; printf("輸入要刪除的元素"); scanf("%d",&e); i=makesureElem(L,e); if((i<1)||(i>L.length)) return 0;//i的合法值為1<=i<=ListLength(L)+1 else{ int *p,*q; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p;//被刪除元素之后的元素左移 --L.length; printf("元素被刪除"); } return 0; } int main(){ SqList L; CreatList(L); Traverse(L); LocateElem(L,1); ListInsert(L);// ListInsert(L,3,8); Traverse(L); ListDelete(L); Traverse(L); return 0; }
的存儲空間