数据结构-双向链表

  • 2020-09-27
  • 0
  • 0

1 //双链表的初始化
2 typedef struct DualNode
3 {
4 ElemType data;
5 struct DualNode *prior; //前驱节点
6 struct DualNode *next; //后继节点
7 }DualNode,*DuLinkList;

8 //双链表的插入
9 s->next = p;
10 s-prior = p->prior;
11 p->prior->next = s;
12 p->prior = s;

插入操作

13 //双向链表的删除
14 p->prior->next = p->next;
15 p->next->prior = p->prior;
16 free(p);//释放节点
17 //双链表节省时间是由空间换取时间。

删除操作

写个程序练习一下:

/*要求实现用户输入一个数使得26各字母的排列发生变化
   eg:
       输入3时,使得前三个字母移到最后,
     输入-3时,使得最后三个数移到最前。
 */
 include 
 include 
 define OK     0
 define ERROR      1
 typedef char ElemType;
 typedef int Status;
 typedef struct DualNode
 {
     ElemType data;
     struct DualNode *prior;
     struct DualNode *next;
 }DualNode, *DuLinkList;
 Status InitList(DuLinkList *L)
 {
     DualNode *p,*q;
     int i;
 *L = (DuLinkList)malloc(sizeof(DualNode));
 if(!(*L))
 {
     return ERROR;
 }
 (*L)->next = (*L)->prior = NULL;
 p = (*L); for(i = 0 ; i < 26 ; i++)
 {
     q = (DualNode *)malloc(sizeof(DualNode));
     if( !q )
     {
         return ERROR;
     }
     q->data = 'A'+i;
     q->prior = p;
     q->next = p->next;
     p->next = q;
     p = q;
 } p->next = (*L)->next;
 (*L)->next->prior = p;
 return  OK;
 }
 void Caesar(DuLinkList L, int i)
 {
     if(i > 0)
     {
         do
         {
             (L) = (L)->next;
         }while( --i );
     }
     if(i < 0 )
     {
         do
         {
             (L) = (*L)->next;
         }while( ++i );
     }
 }
 int main()
 {
     DuLinkList L;
     int i, n;
     InitList(&L);
     printf("请输入一个整数");
     scanf("%d",&n);
     printf("\n");
     Caesar(&L, n);
 for(i = 0;i < 26; i++ )
 {
     L = L->next;
     printf("%c", L->data);
 } return 0;
 }

这是效果图:

哈哈有个低级错误

看到了吗?

这个斜杠反了我的弱鸡操作
更改后的效果

评论

还没有任何评论,你来说两句吧