資料結構線性表順序結構c語言實現程式碼
阿新 • • 發佈:2018-12-12
#include<stdio.h> #include<stdlib.h> typedef int ElementType; typedef struct LNode * PtrToLNode; struct LNode{ ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position;//這裡的位置是結點的地址 typedef PtrToLNode List; //初始化 List MakeEmpty() { List L; L = (List)malloc(sizeof (struct LNode)); if (!L) exit (-1); L->Next = NULL; return L; } //根據指定的位序查詢 int FindKth(List L,int K) { Position p; int cnt = 1;//位序從1開始 p = L->Next; while(p&&cnt<K) { p = p-> Next; cnt++; } if((cnt==K)&&p) printf("您查詢的數為:%d\n",p -> Data); else printf("您查詢數不存在"); } //按值查詢 Position Find(List L,int X) { Position p; p = L->Next; while(p&&p->Data!=X) { p = p-> Next; } if(p) printf("查詢成功,您查詢的數為:%d\n",p->Data); else printf("您查詢數不存在"); } //插入 List Insert(List L ,ElementType X,int i) { Position tmp,pre; int cnt =0 ; pre = L; while(pre&&cnt<i-1) { pre = pre->Next; cnt++; } if(pre==NULL||cnt!=i-1) { printf("插入位置引數錯誤\n"); } else { tmp = (Position)malloc(sizeof(struct LNode)); tmp->Data=X; tmp->Next=pre->Next; pre->Next=tmp; } } //刪除 bool Delete(List L,int i){ Position tmp,pre; int cnt = 0; pre = L; while(pre&&cnt<i-1) { pre=pre->Next; cnt++; } if(pre==NULL||cnt!=i-1||pre->Next==NULL){ printf("刪除位置引數錯誤"); } else { tmp = pre->Next; pre->Next = tmp->Next; free(tmp); printf("刪除成功"); } } //求表長 int Length(List L){ Position p; int cnt = 0; p = L->Next; while(p) { p = p -> Next; cnt++; } return cnt; } void DisLinkList(List L){ List p = L->Next; printf("輸出連結串列: "); while (p) { printf("%d ", p->Data); p = p->Next; } } int main() { Position pre; Position L = MakeEmpty(); pre = L; int i,n,x,len,cz,del; //插入 scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&x); Insert(pre,x,i); } //輸出 DisLinkList(pre); printf("\n"); //求表長 len = Length(L); printf("表長為:%d",len); printf("\n"); //按值查詢 printf("請輸入你要按值查詢的數:\n"); scanf("%d",&cz); Find(L,cz); printf("\n"); //按序號查詢 printf("請輸入你要按序號查詢的數的序號:\n"); scanf("%d",&cz); FindKth(L,cz); printf("\n"); //刪除 printf("請輸入你要刪除的數的下標:\n",del); scanf("%d",&del); Delete(L,del); DisLinkList(pre); printf("\n"); return 0; }