1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList; bool InitList(LinkList &L); bool Empty(LinkList L); bool isTail(LinkList L, LNode *p); LinkList CreatList(); LinkList LListInsert(LinkList L,int i,int x); int count = 0; int main(void) { int i; LinkList list, start; InitList(list); printf("请输入循环单链表的数据, 以0结束!\n"); list = CreatList(); printf("循环单链表的元素有:\n"); for(start = list->next; start != NULL; start = start->next) { if(count== 0) { break; } printf("%d ", start->data); count--; } printf("\n"); return 0; }
bool InitList(LinkList &L) { L = (LNode *)malloc(sizeof(LNode)); if (L == NULL) { return false; } L->next = L; return true; }
bool isTail(LinkList L, LNode *p) { if (p->next == L) { return true; } else { return false; } }
bool Empty(LinkList L) { if (L->next == L) { return true; } else { return false; } }
LinkList CreatList() { LNode *L; L = (LNode *)malloc(sizeof(LNode)); L->next = L; LNode *r; r = L; int x; while(scanf("%d",&x)) { if(x == 0) { break; } count++; LNode *p; p = (LNode *)malloc(sizeof(LNode)); p->data = x; r->next = p; r = p; } r->next = L; return L; }
LinkList LListInsert(LinkList L,int i,int x) { LNode *pre; pre = L; int tempi = 0; for (tempi = 1; tempi < i; tempi++) { pre = pre->next; } LNode *p; p = (LNode *)malloc(sizeof(LNode)); p->data = x; p->next = pre->next; pre->next = p; return L; }
LinkList DelData(LinkList L,int x) { LNode *p,*pre; p = L->next; while(p->data != x) { pre = p; p = p->next; } pre->next = p->next; free(p); return L; }
|