C語言連結串列節點插入與刪除
阿新 • • 發佈:2018-12-10
線性表操作
順序表是我們資料結構中的基本儲存形式,現在給定一個順序表,有如下操作: Insert X Y:在順序表中X位置插入Y元素,遍歷輸出當前順序表的所有元素。 Delete X:刪除順序表中的X元素,如果有多個X元素,只刪除第一個X,遍歷輸出當前順序的所有元素。 Locate X:輸出順序表中X元素的所在的位置,如果有多個X元素,只輸出第一個X元素的位置。 GetElem X:輸出順序表中X位置上的元素。
程式碼如下:
#include<string.h> #include<stdio.h> #include<stdlib.h> typedef struct node //定義一個結構體 { int data; struct node *next; }node, *lk; void init(lk *l) //定義一個連結串列頭節點 { (*l) = (lk)malloc(sizeof(node)); (*l)->next = NULL; } void creat(lk l,int n) //建立一個連結串列 { int a; lk tmp, p; tmp = l; int i; for(i = 0;i < n;i++) { p = (lk)malloc(sizeof(node)); scanf("%d", &a); p->data = a; p->next = NULL; tmp->next = p; tmp = p; } } void insert(lk l,int n, int m) //Insert X Y:在順序表中X位置插入Y元素,遍歷輸出當前順序表的所有元素。 { lk p, q; p = l; int i; for(i = 0;i < n-1;i++) { p = p->next; } q = (lk)malloc(sizeof(node)); q->data = m; q->next = p->next; p->next = q; } void show(lk l) //列印連結串列 { int flag = 1; lk p; p = l; p = p->next; while(p) { if(flag) { printf("%d", p->data); flag = 0; } else{ printf(" %d", p->data); } p = p->next; } printf("\n"); } int GetElem(lk l, int n) //GetElem X:輸出順序表中X位置上的元素。 { int i; for(i = 0;i < n;i++) { l = l->next; } return l->data; } int Delete (lk l, int n) //Delete X:刪除順序表中的X元素,如果有多個X元素,只刪除第一個X,遍歷輸出當前順序的所有元素。 { lk p ,q,s; p = l; q = l->next; int i = 0; while(q) { if(q->data==n) { p->next = q->next; //s = q; q= q->next; i = 1; break; } else { p = p->next; q = q->next; } } return i; } int Locate(lk l,int n) Locate X:輸出順序表中X元素的所在的位置,如果有多個X元素,只輸出第一個X元素的位置。 { int q = 0; while(1) { l = l->next; q++; if(l->data == n) { break; } } return q; } int main() { int m , n; scanf("%d %d", &m, &n); lk l; init(&l); creat(l, m); int k; char a[10]; int x,y,rt; for(k = 0;k < n;k++) { scanf("%s", &a); if(a[0] == 'I') { scanf("%d %d", &x, &y); if(x > m) { printf("Wrong Input!\n"); } else { insert(l,x,y); show(l); } } else if(a[0] == 'D') { scanf("%d", &x); if(Delete(l,x) == 0) { printf("Wrong Input!\n"); } else { Delete(l,x); show(l); } } else if(a[0] == 'L') { scanf("%d", &x); if(x > m) { printf("Wrong Input!\n"); } else { rt = Locate(l,x); printf("%d\n", rt); } } else if(a[0] == 'G') { scanf("%d", &x); if(x > m) { printf("Wrong Input!\n"); } else { rt = GetElem(l,x); printf("%d\n", rt); } } else { printf("%d\n", rt); } } return 0; }
結果展示: