线性链表
#include
//C语言P345 线性链表
struct Grade //可以理解为score是存储数据,next是指针,一个链表是由 数据+指针 组成 { int score; struct Grade *next;//指向自身的指针 }; typedef struct Grade NODE;//记住typedef的用法
//线性表的创建
NODE *Create_linkList() { NODE *head;//头结点 NODE *tail;//尾结点 NODE *pnew;//指向实际数据的节点 int score;//数据 head = (NODE *)malloc(sizeof(NODE));//创建头结点 if (head==NULL) { printf("头结点创建失败!"); return NULL; } head->next = NULL;//头结点的指针域设置为NULL tail = head;//开始时尾结点指向头结点0 printf("输入学生的成绩:"); while (1) { scanf("%d", &score); if(score<0) //当输入成绩为负,跳出循环,停止输入 break; pnew = (NODE *)malloc(sizeof(NODE));//创建新的节点 if (pnew==NULL) { printf("没有足够的空间!n"); return NULL; } pnew->score = score;//新节点数据域存放数据 pnew->next = NULL;//新节点的指针域设置为NULL tail->next = pnew;//新节点插入到链尾 tail = pnew;//指向当前的尾结点 } return head;//返回创建的链表的头结点 }
//插入 *** 作
void Insert_linkList(NODE *head, NODE *pnew, int i) { NODE *p; int j; p = head; for (j = 0;j < i&&p != NULL;j++) p = p->next; if (p==NULL) { printf("第%d个节点不存在!n", i); return; } //关键 *** 作 pnew->next = p->next; p->next = pnew; }
//删除 *** 作
void Delete_linkList(NODE *head, int i) { NODE *p, *q; int j; if (i == 0) return; p = head; for (j = 1;j < i&&p->next != NULL;j++) p = p->next; if (p->next==NULL) { printf("第%d个和节点不存在!n", i); return; } q = p->next;//q指向待删除的节点i p->next = q->next;//其实上面两句相当于p->next = p->next->next free(q);//释放第i个节点的数据 }
//链表的输出 *** 作
void Display_linkList(NODE *head) { NODE *p; for (p = head->next;p!=NULL;p = p->next) printf("%dt", p->score); printf("n"); } //链表的销毁 void Free_linkList(NODE *head) { NODE *p, *q; p = head; while (p->next!=NULL) { q = p->next; p->next = q->next; free(q); } free(head); }
void main() { NODE *head, *pnew; head = Create_linkList();//创建链表,输入数据 if (head == NULL)//创建失败 return; printf("输出创建节点:"); Display_linkList(head);//链表的输出 *** 作 pnew = (NODE *)malloc(sizeof(NODE));//新建一个节点 if (pnew==NULL) { printf("节点创建失败!"); return; } pnew->score = 88; Insert_linkList(head, pnew, 3);//将新节点插入节点3后面 printf("插入新的节点:"); Display_linkList(head);//输出 *** 作 Delete_linkList(head, 3);//删除节点3 printf("删除节点后:"); Display_linkList(head);//输出 *** 作 Free_linkList(head);//销毁链表 }
输出数据可以为非零正数,在最后输入-1表示结束
例如120 130 140 150 160 -1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)